Django 1.11,Django Rest Framework 3.6。
我有2个模型,Foo
和Bar
:
class Foo(models.Model):
name=models.CharField()
sex=models.CharField()
class Bar(models.Model):
type=models.CharField()
foo=models.ForeignKey(Foo)
在我的serializers.py
中,我有:
class FooSerializer(serializers.ModelSerializer):
class Meta:
model = Foo
fields = ('sex',)
class BarSerializer(serializers.ModelSerializer):
foo = FooSerializer(many=False)
class Meta:
model = Bar
fields = ('type', 'foo',)
这将生成如下所示的JSON:
{
"type": "abcdefg",
"foo": {
"sex": "male"
}
}
我真正想要的是使“ foo”字段保持平坦,即:
{
"type": "abcdefg",
"foo": "male"
}
一种可能的解决方案是使用StringRelatedField,但这将需要设置__str__
模型的Foo
方法以返回sex
字段,我这样做不想。
答案 0 :(得分:1)
一种更简单的选择是使用SlugRelatedField,它可以指向任何字段。
class BarSerializer(serializers.ModelSerializer):
foo = SlugRelatedField(slug_field='sex')
class Meta:
model = Bar
fields = ('type', 'foo',)
答案 1 :(得分:0)
您可以尝试使用SerializerMethodField代替。
class BarSerializer(serializers.ModelSerializer):
foo = serializers.SerializerMethodField()
@staticmethod
def get_foo(item):
if item.foo:
return item.foo.sex
class Meta:
model = Bar
fields = ('type', 'foo',)