我有一个父对象和一对一相关的子模型,我想在父表示(read only
)中渲染子平面的字段.目前,我已经通过自定义to_representation
实现实现了这一点,但这似乎非常复杂,我想知道是否有更简单的方法来实现这一点.
由于我的相关模型是通过属性连接的,因此更加复杂.
所以这是具体的例子:默认情况下,相关对象将呈现为:
{ parent_name:'Bob', child:{ name:'Alice' } }
这就是我想要的,目前得到我的to_representation
:
{ parent_name:'Bob', child_name:'Alice' }
我的模型看起来像这样:
class ChildModel(models.Model): name = models.CharField(max_length=100, null=True) class ParentModel(models.Model): name = models.CharField(max_length=100, null=True) _child = models.ForeignKey('ChildModel', null=True) @property def child(self): return self._most_recent_status @name.setter def child(self, value): self._child = value
这是我的序列化器:
class FlatChildField(serializers.RelatedField): def to_representation(self, value): return value.name class FlatParentSerializer(serializers.ModelSerializer): parent_name = serializers.CharField(source='name', read_only=True) child_name = FlatChildField(source='_child', read_only=True) class Meta: model = Parent fields = ('name', 'child_name')
对于更简单的解决方案来获得相关模型的平面表示,我将不胜感激.
为了完整起见,我很想知道是否有一个更简单的"正常"相关模型解决方案(即不是属性模型字段).我正在寻找相当于django模型的查询语法related_model__field
,但我找不到.django休息框架是否存在?
非常感谢
最简单的方法是使用源:
class FlatParentSerializer(serializers.ModelSerializer): parent_name = serializers.CharField(source='name', read_only=True) child_name = serializers.CharField(source='_child.name', read_only=True) class Meta: model = Parent fields = ('name', 'child_name')