6

모델에 일반 관계를 사용하고 Django Rest Framework를 사용하여 직렬화하려고합니다. 다음을 수행 그러나 것은 나에게 속성 오류 제공 :Django Rest 프레임 워크를 사용하여 일반 관계를 직렬화하는 방법

'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') 

? 내가 장고 휴식 프레임 워크 설명서에서 이것에 대해 많이 찾을 수 없었다.

답변

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') 

자세한 내용은 장고 REST 프레임 워크 documentation에서 확인할 수 있습니다.