6

我在模型上使用通用關係並試圖使用Django Rest Framework對其進行序列化。然而執行以下操作給了我一個屬性錯誤:如何使用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框架文檔中,我無法找到很多關於此的信息。

回答

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

相關問題