0

Ich habe zwei django ModelleZugriff auf Django ForeignKey-Modellfeld?

Modell A

class A(models.Model): 
    aname = models.CharField(max_length=64, verbose_name='name') 

und Modell B

class B(models.Model): 
    bname = models.CharField(max_length=64, verbose_name='name') 
    mod = models.ForeignKey(A, related_name='a_b',null=True,on_delete=models.CASCADE) 

Der Serializer für das Modell B ist

class BSerializer(serializers.ModelSerializer): 
mod= ASerializer(many=False, read_only=True) 
class Meta: 
    model = B 
    fields = (','id','bname','mod.aname') 

ich das aname Feld wollen von Modell A zu ac mit dem Serializer von Modell B bearbeitet. Die Verwendung von mod.aname funktioniert nicht. Es heißt

Feldname mod.aname ist nicht gültig für Modell B.

Wie kann ich es tun?

Antwort

2

Wie wäre es mit diesem? mit Parameter source innerhalb serializers.CharField:

class BSerializer(serializers.ModelSerializer): 
    mod = serializers.CharField(
     source='mod.aname', 
     read_only=True 
    ) 

    class Meta: 
     model = B 
     fields = ('id','bname','mod') 
+0

es funktioniert. Vielen Dank. bitte nicht, dass ich das Modell Hotel zu B und HotelSerializer zu Bserializer für ein besseres Verständnis geändert habe. Es wird für jemanden hilfreich sein, wenn Sie Ihre Antwort entsprechend ändern. –

+0

vielen Dank für die Korrektur .. –

0

Verwenden Sie zwei Unterstriche, wenn Sie Felder verwandter Modelle als Zeichenfolge referenzieren, z. B. 'mod__aname'.

class HotelSerializer(serializers.ModelSerializer): 
    mod= ASerializer(many=False, read_only=True) 

    class Meta: 
     model = Hotel 
     fields = ('id','bname','mod__aname') 

Dies sollte funktionieren, wenn ASerializer etwas wie folgt aussieht:

class ASerializer(serializers.ModelSerializer): 

    class Meta: 
     model = A 
     fields = '__all__' 
+0

funktioniert nicht. zeigt an, dass mod__aname kein gültiges Modell für B –

+0

ist. Ich sehe, dass Sie die Namen Ihrer Modelle geändert haben. Es ist schwer für mich, bei der Fehlersuche zu helfen, wenn ich nicht weiß, was Sie eingegeben haben. Ich kann nicht sagen, ob "B" tatsächlich "Hotel" heißt, und Sie haben es für die Post geändert oder, wenn Sie einen Fehler in Ihrem Code gemacht haben, indem Sie in "Hotel" gehen. – DragonBobZ

+0

Ich habe Hotel zu B, HotelSerializer zu Bserializer für mehr Bequemlichkeit geändert. keine andere Änderung. Ich hoffe, das hat keine Auswirkungen auf Ihre Antwort. –

Verwandte Themen