6

Używam Ogólnej relacji na modelu i próbuję serializować go za pomocą Django Rest Framework. Jednak wykonując następujące daje mi błąd atrybut:Jak przekształcić typową relację za pomocą 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') 

Co robię źle? Nie mogłem znaleźć wiele informacji na ten temat w dokumentacji reszta django.

Odpowiedz

6

Jeśli chcesz serializować ogólny klucz obcy, musisz zdefiniować pole niestandardowe, aby wyraźnie określić sposób serializowania celów relacji.

Pod warunkiem, że dany model AdditionalInfo ma związek z ogólną modeli SealType1 i SealType2, można zobaczyć przykład poniżej.

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

Więcej szczegółów można znaleźć w systemie Django REST documentation.

Powiązane problemy