我正在使用django rest框架,我想序列化GenericRelation
。
在我的模特中,我有:
class Asset(model.Models):
name = models.CharField(max_length=40)
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type','object_id')
class Project(models.Model):
name = models.CharField(max_length=40)
file = generic.GenericRelation(Asset)
我正在尝试为我的项目编写一个序列化,它将返回名称和资产ID。我有这个:
class AssetObjectRelatedField(serializers.RelatedField):
def to_native(self, value):
if isinstance(value, Project):
serializer = Project(value)
else:
raise Exception('Unexpected type of asset object')
return serializer.data
class ProjectSerializer(serializers.HyperlinkedModelSerializer):
file = AssetObjectRelatedField()
class Meta:
model = Project
fields = ('name','file')
当我尝试访问项目时,我得到:
意外类型的资产对象
我缺少什么想法?
更新:我搞定了。但它似乎不适合我读过的文档。答案是将传递给AssetObjectRelatedField
的值视为资产类型。这与其记录的here。
我现在有以下工作。
class AssetObjectRelatedField(serializers.RelatedField):
def to_native(self, value):
return value.id
答案 0 :(得分:0)
将模型添加到内容类型可以解决此问题。这是一个例子。
content_object = generic.GenericForeignKey('content_type', 'object_id')
https://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/#generic-relations