【问题标题】:How to serialize Generic Relation using Django Rest Framework如何使用 Django Rest Framework 序列化泛型关系
【发布时间】:2014-10-02 17:59:11
【问题描述】:

我在模型上使用泛型关系并尝试使用 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')

序列化器.py

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

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

【问题讨论】:

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


    【解决方案1】:

    如果您想序列化一个通用外键,您需要定义一个自定义字段,以明确确定您希望如何序列化关系的目标。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-13
      • 2016-12-18
      • 2015-03-04
      • 1970-01-01
      • 2017-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多