6

Ich verwende eine generische Relation für ein Modell und versuchen, es mit Django Rest Framework zu serialisieren. Allerdings macht die folgende gibt mir ein Attribut Fehler:Wie generische Relation mit dem Django Rest Framework zu serialisieren ist

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

Was mache ich falsch? Ich konnte dazu in der Django-Rest-Framework-Dokumentation nicht viel finden.

Antwort

6

Wenn Sie einen generischen Fremdschlüssel serialisieren möchten, müssen Sie ein benutzerdefiniertes Feld definieren, um explizit festzulegen, wie die Ziele der Beziehung serialisiert werden sollen.

Sofern Ihr AdditionalInfo Modell eine generische Beziehung mit Modellen SealType1 und SealType2 hat, können Sie ein Beispiel siehe unten.

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

Sie können mehr Details in Django REST Rahmen documentation finden.