我想包括在DRF如何在Django Rest Framework中使用GenericRelation?
该文档与GenericRelation
backrefrence的模型表明,这应该是很容易(略高于:http://www.django-rest-framework.org/api-guide/relations/#manytomanyfields-with-a-through-model) - 但我失去了一些东西!
注意,反向通用密钥,使用GenericRelation 字段中表达,可以使用常规关系字段类型, 由于目标的关系中的类型总是已知的序列化。
欲了解更多信息,请参阅关于通用 关系的Django文档。
我的模型:
class Voteable(models.Model):
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
direct_vote_count = models.IntegerField(default=0)
class Question(models.Model):
user = models.ForeignKey(UserExtra, related_name='questions_asked')
voteable = GenericRelation(Voteable)
question = models.CharField(max_length=200)
和我的串行:
class VoteableSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Voteable
fields = ('pk', 'id', 'url', 'direct_vote_count')
class QuestionSerializer(serializers.HyperlinkedModelSerializer):
#voteable = VoteableSerializer(read_only=True, many=False)
#voteable = serializers.PrimaryKeyRelatedField(many=False, read_only=True)
class Meta:
depth = 1
model = Question
fields = ('url', 'question', 'user', 'voteable')
两个注释掉线是我在告诉DRF如何序列尝试voteable
内Question
第一个给我
'GenericRelatedObjectManager' object has no attribute 'pk'
和第二
<django.contrib.contenttypes.fields.create_generic_related_manager.<locals>.GenericRelatedObjectManager object at 0x7f7f3756cf60> is not JSON serializable
因此,很明显,我误解的东西,任何想法是什么?
你想要实现的是通用的1对1关系。它不支持开箱即用。看看[这个问题](http://stackoverflow.com/q/7837330/1377864)可能的解决方法:'voteable = GenericRelation(Voteable)'成为'voteables = GenericRelation(可投票)'+'voteable'属性模型级别。用这种方法你的第一个选项应该可以正常工作 –
我看到 - 我想我的另一种选择是使用指向可投票的常规ForeignKey(以及其他我想投票的类)而不是GenericRelation ... – Chozabu