如何使用Django Rest Framework序列化通用关系

时间:2014-10-02 17:59:11

标签: python django serialization django-rest-framework generic-foreign-key

我在模型上使用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框架文档中找不到相关内容。

1 个答案:

答案 0 :(得分:6)

  

如果要序列化通用外键,则需要定义自定义字段,以明确确定序列化关系目标的方式。

如果您的AdditionalInfo模型与模型SealType1SealType2具有通用关系,则可以在下面看到示例。

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中找到更多详细信息。