【发布时间】:2014-11-30 19:48:47
【问题描述】:
鉴于我有这样的模型:
class Case(models.Model):
opened = models.DateTimeField(auto_now_add=True)
client_first_name = models.CharField(max_length=50)
client_last_name = models.CharField(max_length=50)
我想对client_* 字段进行分组,以便序列化的 JSON 如下所示:
{
"opened": "2014-10-05T19:30:48.667Z",
"client": {
"first_name": "John",
"last_name": "Doe"
}
}
我尝试了以下方法,但不起作用,因为client 不是实际字段:
class ClientSerializer(serializers.ModelSerializer):
class Meta:
model = Case
fields = ('client_first_name', 'client_last_name')
class CaseSerializer(serializers.ModelSerializer):
client = ClientSerializer()
class Meta:
model = Case
fields = ('opened', 'client')
除了完全手动序列化之外,我还有哪些选择?我不想为Client 制作单独的模型,因为这些数据确实属于Case。只读是不够的。
【问题讨论】:
-
@brawaga 这不是一个真正的答案,因为它是“完全手动序列化”,我写道我正在寻找除此之外的其他选项。不管怎么说,还是要谢谢你;很高兴得到作者的意见。
-
@Dien,基于不是答案,而是在底部的顶部帖子更新,您可以构建一个不违反 DRY 的解决方案,这不会是完全的,而是半手动序列化,只是因为解决方案是操纵validated_data 和instance,可能还有更多。它会双向工作。
-
@brawage 啊,你说得对——我把“答案”也从字面上理解了。里面可能有东西。虽然我同意汤姆的观点,他的版本更具可读性。
标签: django django-rest-framework