42

Django Rest Frameworkから2つのリンクされたモデルのデータを含むHttpResponseを返そうとしています。 モデルは以下のとおりです。Django Rest Framework - シリアライザで関連するモデルフィールドを取得

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

私は、関連するワインからの情報を含むボトルモデルのシリアライザを持っているしたいと思います。

私が試した:動作しません

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

を。

どのようにすればよいのでしょうか?

感謝:)そのような単純な

+0

このためおかげで、私はほとんどそこです。 @ tom-christieがオブジェクト自体を取得する方法について説明していますが、Wineオブジェクトからすべてのフィールドを取得できません。 – bpipat

+0

'RelatedField'引数として' source = '*' 'を試してください。 – mariodev

+0

私はまだクエリの結果でユニコード名を取得します。フィールドでwine.colorを試してもうまくいきません source = '*'は何の変更ですか? – bpipat

答えて

49

、フィールドがそれを解決してWineSerializerを追加します。

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

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

class WineSerializer(serializers.HyperlinkedModelSerializer): 

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

ヘルプ@mariodevてくれてありがとう:)

+0

あなたはそれを並べ替えてうれしいです。また、WineSerializerクラスが何を表しているのか説明してください。 – mariodev

+0

リクエストに感謝しました。 – bpipat

+1

私はこれをやっていますが、残念なエラーが出ています。 'HyperlinkedRelatedFieldはシリアライザコンテキスト。シリアライザのインス​​タンス化時にcontext = {'request':request} 'を追加します。私は間違って何をしていますか? – arturataide

関連する問題