0

I持つ二つの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を使用すると動作しません。それは

フィールド名はBには無効です。

どうすればいいですか?

答えて

2

どのように?パラメータsourceを使用してserializers.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'のように、関連するモデルのフィールドを文字列として参照する場合は、2つのアンダースコアを使用します。

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

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

ASerializerはこのようなものに見える場合、これは動作するはずです:この約1

class ASerializer(serializers.ModelSerializer): 

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

は使用できません。 mod__anameがBの有効なモデルではないことを示しています –

+0

あなたのモデルの名前が変更されています。実際にあなたが入力したものがわからないと、デバッグに役立つのは難しいです。つまり、 'B'が実際に'ホテル 'と呼ばれ、投稿用に変更された場合、または'ホテル 'に残ってコードを間違えた場合は、私は判断できません。 – DragonBobZ

+0

ホテルのB、HotelSerializerをBserializerに変更しました。その他の変更はありません。あなたの答えに何の影響も与えないことを願っています。 –

関連する問題