Python 使用Django Rest框架从列表中的对象序列化自定义字段

Python 使用Django Rest框架从列表中的对象序列化自定义字段,python,django,django-rest-framework,Python,Django,Django Rest Framework,我有一个模型,看起来像这样: class Foo: name = CharField() class Bar: foo = ForeignKey(Foo, related_name='bars') bar_text = TextField() 我希望Foo的序列化版本看起来像: { bars : [ "baz", "whizz" ] } i、 e而不是显示每个条的ids,而是显示内部的“bar\u text”字段 我想

我有一个模型,看起来像这样:

class Foo:
    name = CharField()

class Bar:
    foo = ForeignKey(Foo, related_name='bars')
    bar_text = TextField()
我希望Foo的序列化版本看起来像:

{
    bars : [
        "baz",
        "whizz"
    ]
}
i、 e而不是显示每个条的
id
s,而是显示内部的“bar\u text”字段

我想我知道如何正常操作,也就是说,如果每个“Foo”下都有一个
bar
属性,而不是一个列表:

class FooSerializer(models.ModelSerializer):
    bar = serializers.TextField(source='bar.bar_text')
但我不知道如何在使用“条”列表时执行相同的覆盖,并且似乎找不到任何明显的东西


编辑:我忘了提到-我想我可以通过重写
还原对象
函数来实现这一点,但是如果有更简洁的方法,我会洗耳恭听。

一个几乎对我有效的解决方案是用
BarSerializer
重写
FooSerializer
上的
bars
属性:

class FooSerializer(models.ModelSerializer):
    bars = BarSerializer(many=True)
但是,当序列化时,这给了我以下信息:

{
    bars: [
        {
            'bar_text' : 'baz',
        },
        { 
            'bar_text' : 'whizz'
        }
    ]
}

这很好,但我真的想要一个
bar\u文本的列表,而不是键/值对。更重要的是,如果我向
Bar
添加了更多我不想被序列化到
Foo
中的字段,我无法控制此处显示哪些字段,而不是
Bar
的纯序列化。如果没有更好的解决方案,我很快就会接受。

听起来您是在寻找一个而不是嵌套序列化程序

class FooSerializer(models.ModelSerializer):
    bars = serializers.SlugRelatedField(slug_field='bar_text')

谢谢-这达到了我想要的!