我在模型上使用Generic Relation并尝试使用Django Rest Framework对其进行序列化。但是,执行以下操作会给我一个属性错误:
'GenericForeignKey' object has no attribute 'field'
models.py
class AdditionalInfo():
#other fields
seal_type = models.ForeignKey(ContentType,
related_name='seal'
)
seal_id = models.PositiveIntegerField(null=True)
seal = generic.GenericForeignKey(
'seal_type',
'seal_id')
serializers.py
class AdditionalInfoSerializer():
seal = serializers.Field(source='seal')
我做错了什么?我在django rest框架文档中找不到相关内容。
答案 0 :(得分:6)
如果要序列化通用外键,则需要定义自定义字段,以明确确定序列化关系目标的方式。
如果您的AdditionalInfo
模型与模型SealType1
和SealType2
具有通用关系,则可以在下面看到示例。
class SealRelatedField(serializers.RelatedField):
def to_native(self, value):
"""
Serialize seal object to whatever you need.
"""
if isinstance(value, SealType1):
return ...
elif isinstance(value, SealType2):
return ...
raise Exception('Unexpected type of tagged object')
您可以在Django REST框架documentation中找到更多详细信息。