在Django中向序列化器添加另一个类

时间:2018-10-28 23:20:36

标签: django django-models django-rest-framework

我希望向现有的序列化器中添加另一个类。我可以做简单的序列化程序,但是这很棘手,因为我要添加的第二个类位于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 :(得分:0)

您应该添加名为所有者的新序列化器

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

PokemonSerializer中添加字段所有者

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

您可以阅读更多here

答案 1 :(得分:0)

您可以在CharField中使用source

class PokemonSerializer(serializers.HyperlinkedModelSerializer):

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

    class Meta:
        model = Pokemon
        fields = ('id', 'type', 'stat', 'owner')