6

Sto usando una relazione generica su un modello e sto provando a serializzarla usando Django Rest Framework. Tuttavia facendo la seguente mi dà un errore di attributo:Come serializzare la relazione generica usando 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') 

Che cosa sto facendo di sbagliato? Non ero in grado di trovare molto su questo nella documentazione del framework di django resto.

risposta

6

Se si desidera serializzare una chiave esterna generica, è necessario definire un campo personalizzato per determinare in modo esplicito come si desidera serializzare gli obiettivi della relazione.

A condizione che il vostro modello AdditionalInfo ha un rapporto generico con modelli SealType1 e SealType2, è possibile vedere un esempio qui sotto.

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

Potete trovare maggiori dettagli nel Django REST quadro documentation.