6

我在模型上使用通用关系并尝试使用 Django Rest Framework 对其进行序列化。但是,执行以下操作会给我一个属性错误:

'GenericForeignKey' object has no attribute 'field'

模型.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')

序列化程序.py

class AdditionalInfoSerializer():
    seal = serializers.Field(source='seal')

我究竟做错了什么?我在 django rest 框架文档中找不到太多关于此的内容。

4

1 回答 1

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

于 2014-10-05T19:54:49.230 回答