0

我有兩個Django模型如何訪問的Django ForeignKey的示範田?

模型中的

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

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

爲B型串行器是

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

我想aname場模型A的交流與模型B的序列化程序一起使用。使用mod.aname不起作用。它說

字段名稱mod.aname不適用於型號B

我該怎麼辦呢?引用

回答

2

這件怎麼樣?使用參數sourceserializers.CharField

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

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

。謝謝。請不要說我已經將模型酒店更改爲B和HotelSerializer以更好地理解Bserializer。如果你相應地改變你的答案,那對你有幫助。 –

+0

非常感謝您糾正.. –

0

使用兩個下劃線時,相關車型的領域作爲一個字符串,如'mod__aname'

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

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

這應該工作,如果ASerializer看起來是這樣的:

class ASerializer(serializers.ModelSerializer): 

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

不起作用。顯示mod__aname是不是對於B –

+0

一個有效的模式,我看你已經改變了你的模型的名稱。如果我真的不知道你輸入了什麼,我很難幫助調試。由於是,我不能告訴如果'B'實際上是所謂的'Hotel',你改變了它的職位,或者如果您是通過在'Hotel'留下犯了一個錯誤在你的代碼。 – DragonBobZ

+0

我已經改變了酒店,以B,HotelSerializer到Bserializer,更好的方便。沒有其他變化。我希望這對你的答案沒有任何影響。它的工作原理是 –