web-dev-qa-db-ja.com

Django Rest Framework-シリアライザーの関連モデルフィールドを取得

Django 2つのリンクされたモデルからのデータを含むRest FrameworkからHttpResponseを返そうとしています。モデルは次のとおりです。

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

動作しません。

どのように私はそれを行うことができますか?

ありがとう:)

43
bpipat

そのように単純で、フィールドとして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 :)

53
bpipat

特定のフィールドを取得する場合は、シリアライザーフィールドを使用できます

https://www.Django-rest-framework.org/api-guide/fields/

    class BottleSerializer(serializers.HyperlinkedModelSerializer):
        winecolor = serializers.CharField(read_only=True, source="wine.color")

        class Meta:
            model = Bottle
            fields = ('url', 'winecolor', 'user', 'date_rated', 'rating', 'comment', 'get_more')
2
Ryan Jeric