我有一个带有自定义“ArrayField”的模型(对于Postgres数组字段),它将一组外键存储到另一个模型中。 Django没有强制执行这种关系,但我放在那里的是外键。
class Foo(model):
bars = ArrayField(models.IntegerField())
class Bar(model):
blah = models.CharField()
因此'bars'字段的值类似于[3,64,7,34,...]
,其中数字是Bar的非强制外键。渲染Foos时,我想使用Django REST Framework渲染此字段中表示的相关对象:
{ "foo" : { "bars" : [ {"blah":"asdf"},
{"blah":"asdf"}
]
}
}
我无法弄清楚应该如何在序列化器中表达:
class BarSerializer(serializers.ModelSerializer):
class Meta:
fields = ('blah')
blah = serializersCharField()
class FooSerializer(serializers.ModelSerializer):
class Meta:
fields = ('bars')
# bars = BarSerializer(many=True)
bars = SomeSpecialCustomField() #?
渲染时如何获得上述JSON?
答案 0 :(得分:1)
尝试玩这个:
class SomeSpecialCustomField(serializers.Field):
def to_native(self, value):
queryset = Bar.objects.filter(pk__in=value)
serializer = BarSerializer(queryset, many=True)
return serializer.data
确保输入正确的验证,例如检查值是否为列表等。