вложенный сериализатор с нулевыми данными - PullRequest
0 голосов
/ 20 мая 2019

вложенный сериализатор, показывающий нулевые данные

from rest_framework import serializers
from .models import PlayerTable, ChildTable

class ChildTableSerializer(serializers.ModelSerializer):
    # x= ChildTable.objects.all().values
    class Meta:
        model = ChildTable
        fields = ('season','goals','fk')
        # fields =('fk',)

class PlayerTableSerializer(serializers.ModelSerializer):
    player_details = ChildTableSerializer(many=True, read_only=True)

    class Meta:
        model = PlayerTable
        fields =  ('player_details',)

пожалуйста, помогите получить данные, получаемые через сериализатор, нулевые

1 Ответ

0 голосов
/ 20 мая 2019

какое поле 'player-details'? Это не поле на вашей PlayerTable модели. Вам необходимо использовать имя соответствующего поля. В вашем случае, поскольку у вас есть ForeignKey отношение ChildTable --> PlayerTable, и вы не указали related_name, это childtable_set. Так что если вы делаете это, оно должно работать:

class PlayerTableSerializer(serializers.ModelSerializer):
    childtable_set = ChildTableSerializer(many=True, read_only=True)

    class Meta:
        model = PlayerTable
        fields =  ('childtable_set',)

В качестве альтернативы, измените название модели, чтобы она была более согласована с соглашениями Django:

class PlayerDetail(models.Model):
    player = models.ForeignKey(Player, db_column="fk", related_name="player_details", null=True, blank=True, on_delete=models.CASCADE)
    ...

    class Meta:
        managed = False
        db_table = "child_table"


class Player(models.Model):
    name = models.CharField(db_column="player_name", ...)

    class Meta:
        db_table = "player_table"

тогда ваш сериализатор будет работать, потому что отношение player_details. Это также имеет то преимущество, что когда вы делаете details.player, вы получаете объект игрока (теперь вы должны сделать details.fk, но это на самом деле не возвращает значение внешнего ключа, оно возвращает объект Player). Также у ваших моделей есть больше питонических названий (Player, а не PlayerTable). Ваш код будет намного более читабельным.

...