Добавление другого класса в сериализатор в Django - PullRequest
0 голосов
/ 29 октября 2018

Я хочу добавить другой класс к существующему сериализатору. Я могу делать простые сериализаторы, но этот довольно сложный, потому что второй класс, который я хочу добавить, идет после класса сериализатора в models.py - У кого-нибудь есть умное решение?

models.py выглядит следующим образом:

class Pokemon(models.Model):
    id = models.AutoField(primary_key=True)
    type = models.OneToOneField(Type, on_delete=models.PROTECT)
    stat = models.ForeignKey(Stat, on_delete=models.PROTECT, null=True)



class Skills(models.Model):
    id = models.AutoField(primary_key=True)
    pokemon = models.ForeignKey(Pokemon, on_delete=models.PROTECT)
    owner = models.ForeignKey(Owner, on_delete=models.PROTECT, related_name='name')

и serializers.py:

class PokemonSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Pokemon
        fields = ('id', 'type', 'stat')

Дисплей, который у меня сейчас есть:

{
    "id": 2228,
    "type": "http://localhost:8000/type/4628/",
    "stat": "99",

}

и дисплей, для которого я снимаю:

{
    "id": 2228,
    "type": "http://localhost:8000/type/4628/",
    "stat": "99",
    "owner": "bob doe"

}

Заранее большое спасибо!

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

вы можете использовать источник в CharField

class PokemonSerializer(serializers.HyperlinkedModelSerializer):

   owner = CharField(source="owner.name")        

    class Meta:
        model = Pokemon
        fields = ('id', 'type', 'stat', 'owner')
0 голосов
/ 29 октября 2018

Вы должны добавить новый сериализатор, названный владельцем, например,

class Owner(serializers.ModelSerializer):
    class Meta:
        model = skills
        fields = ('owner',)

в PokemonSerializer добавить владельца поля

owner = Owner(many=True, read_only=True)

Подробнее вы можете прочитать здесь

...