42

Ich versuche, eine HttpResponse von Django Rest Framework einschließlich Daten aus 2 verknüpften Modellen zurückgeben. Die Modelle sind:Django Rest Framework - Holen Sie sich verwandte Modellfeld in Serializer

class Wine(models.Model): 

    color = models.CharField(max_length=100, blank=True) 
    country = models.CharField(max_length=100, blank=True) 
    region = models.CharField(max_length=100, blank=True) 
    appellation = models.CharField(max_length=100, blank=True) 

class Bottle(models.Model): 

    wine = models.ForeignKey(Wine, null=False) 
    user = models.ForeignKey(User, null=False, related_name='bottles') 

Ich möchte einen Serializer für das Bottle-Modell haben, die Informationen aus dem Zusammenhang Wein enthält.

Ich habe versucht:

class BottleSerializer(serializers.HyperlinkedModelSerializer): 
    wine = serializers.RelatedField(source='wine') 

    class Meta: 
     model = Bottle 
     fields = ('url', 'wine.color', 'wine.country', 'user', 'date_rated', 'rating', 'comment', 'get_more') 

, die nicht funktioniert.

Irgendwelche Ideen, wie ich das tun könnte?

Thanks :)

+0

Vielen Dank für diese, ich bin fast da. Was @ tom-christie erklärt, funktioniert, um das Objekt selbst zu erhalten, aber ich kann nicht alle Felder aus dem Wine-Objekt holen. – bpipat

+0

Probieren Sie 'source = '*'' als 'RelatedField'-Argument aus. – mariodev

+0

Ich bekomme immer noch den Unicode-Namen im Ergebnis der Abfrage. Und versuchen Wein.Farbe in den Feldern funktioniert nicht Was ändert sich source = '*'? – bpipat

Antwort

49

So einfach ist das Hinzufügen der WineSerializer als ein Feld, um es zu lösen.

class BottleSerializer(serializers.HyperlinkedModelSerializer): 
    wine = WineSerializer(source='wine') 

    class Meta: 
     model = Bottle 
     fields = ('url', 'wine', 'user', 'date_rated', 'rating', 'comment', 'get_more') 

mit:

class WineSerializer(serializers.HyperlinkedModelSerializer): 

    class Meta: 
     model = Wine 
     fields = ('id', 'url', 'color', 'country', 'region', 'appellation') 

Danke für die Hilfe @mariodev :)

+0

Froh, dass Sie das sortieren. Können Sie auch bitte erklären, wofür 'WineSerializer' Klasse steht, so haben wir eine klare Antwort .. – mariodev

+0

Fertig, danke für die Anfrage – bpipat

+1

Ich habe dies getan, aber ich bekomme den folgenden Fehler 'HyperlinkedRelatedField benötigt die Anfrage im Serializer Kontext. Fügen Sie context = {'request': request} 'beim Instanziieren des Serialisierers hinzu.'. Was mache ich falsch? – arturataide

Verwandte Themen