我正在Django中开发一个讨论应用程序,它有线程,帖子,回复和投票。投票使用通用外键和内容类型来确保用户只能在特定的线程/帖子/回复上投票一次。
投票模型看起来像这样:
VOTE_TYPE = (
(-1, 'DISLIKE'),
(1, 'LIKE'),
)
class Vote(models.Model):
user = models.ForeignKey(User)
content_type = models.ForeignKey(ContentType,
limit_choices_to={"model__in": ("Thread", "Reply", "Post")},
related_name="votes")
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_id')
vote = models.IntegerField(choices=VOTE_TYPE)
objects = GetOrNoneManager()
class Meta():
unique_together = [('object_id', 'content_type', 'user')]
投票序列化程序:
class VoteSerializer(serializers.ModelSerializer):
class Meta:
model = Vote
处理投票的观点:
@api_view(['POST'])
def discussions_vote(request):
if not request.user.is_authenticated():
return Response(status=status.HTTP_404_NOT_FOUND)
data = request.DATA
if data['obj_type'] == 'thread':
content_type = ContentType.objects.get_for_model(Thread)
print content_type.id
info = {
'content_type': content_type.id,
'user': request.user.id,
'object_id': data['obj']['id']
}
vote = Vote.objects.get_or_none(**info)
info['vote'] = data['vote']
ser = VoteSerializer(vote, data=info)
if ser.is_valid():
print "Valid"
else:
pprint.pprint(ser.errors)
return Response()
请求。数据内容:
{u'vote': -1,
u'obj_type': u'thread',
u'obj':
{
...
u'id': 7,
...
}
}
当我投票时,Django Rest Framework序列化程序抛出一个错误:
Model content type with pk 149 does not exist.
149是线程模型的ContentType的正确id,根据
print content_type.id
我几乎不知道是什么导致了这一切。。。
问题可能是其中有一个通用外键,它可以链接到任何类型的模型实例,因此REST框架没有确定如何表示序列化数据的默认方式。
看看这里的序列化程序中GFK上的文档,希望它能帮助您开始。。。http://www.django-rest-framework.org/api-guide/relations#generic-关系
如果您仍然发现它有问题,那么只需完全停止使用序列化程序,只需在视图中显式执行验证,并返回您希望用于表示的任何值的字典。
我对django rest框架有一个关于泛型关系的小问题,这个泛型关系也用于唯一的约束。 我有这个模型: 它有一个通用关系和一个唯一的约束:专有网络的名称和通用关系(即所有者)。 以下是序列化程序: 在字段中,我不把content_type和object_id,因为我不想让用户显示/设置它们。 但是,我必须把它们放在UniqueTobetherValidator中,以避免在创建具有相同帐户/名称的
我有一个模型,它使用一个通用外键,使用“content\u type”字段来存储内容类型,“object\u id”来存储对象id。这个模型需要使用CRUD API进行操作,我使用的是DRF。我有一个模型的序列化程序,但我遇到了一点问题。如果我只是将content\u type添加到如下字段列表中 序列化程序将JSON表示设置为ContentType模型实例的ID。API的用户不知道这些ID,我不
我有以下Jquery回调函数,我对它有一点怀疑(我不太了解Jquery): 如您所见,该函数只需向后端执行一个AJAX请求,为该请求设置参数。 数据类型呢?什么说?我在HTTP请求中发送的数据类型? 在这种情况下是“text”,因为我发送的是一个文本字符串,它呈现了XML代码?
问题内容: 我正在尝试确保来自基于Jersey的Java应用程序的所有JSON响应均在其ContentType标头中附加了UTF-8字符编码参数。 所以,如果它是一个JSON响应,我想响应报头的要 内容类型:application / json; charset = UTF-8 如果无论内容类型如何,我都尝试在过滤器中设置字符编码,则效果很好。但是我只想在ContentType为“ applica
问题内容: 我有以下Jquery回调函数,对此我有点怀疑(我不太了解Jquery): 如您所见,该函数只需向后端执行AJAX请求,并为此请求设置参数即可。 我已设置为将请求发送到URL,该请求是POST请求,并且要发送的数据为以下字符串: “ barapple” 我很难理解 contentType* 和 dataType有 什么区别 * 我认为 contentType 指定了HTTP响应中可接受的
问题内容: 有没有办法告诉Django,具有内容类型GenericForeignKey的模型只能指向预定义列表中的模型?例如,我有4个模型:A,B,C,D和一个拥有GenericForeignKey的模型X。我可以告诉X GenericForeignKey只允许A和B吗? 问题答案: 例如,你的应用是app和app2,并且app中有A,B模型,而app2中有C,D模型。你只想查看app.A和app