我想包括在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