[django]将 django 模型字段从嵌套模型移动到“主”模型
· 收录于 2024-01-06 14:11:07 · source URL
问题详情
我有 2 个 django 模型是这样链接的:
以及这 2 个模型的序列化程序:
class ModelASerializer(serializers.Serializer):
id = serializers.CharField(help_text="Measurement ID")
# some other fields here
b_objects = ModelBSerializer(many=True)
classModelBSerializer(serializers.Serializer):
id = serializers.CharField(source="order")
random_field = serializers.FloatField()
unique_field = serializers.FloatField()
我想编写一个端点,该端点将 ModelA 实体列表和所有相关的 ModelB 对象返回到特定的 ModelA 对象。
我目前有这个,它工作得很好:
ModelA.objects.prefetch_related(b_objects).all()
它返回如下所示的对象列表:
{
"id": "92eb8314-3f26-4bf6-8cc0-83d2935434d9",
### modelA fields here
"b_objects": [
{
"id": "1",
"random_field": 1.0,
"unique_field": 0.1
},
{
"id": "2",
"random_field": 5.0,
"unique_field": 0.1
}
]
}
我在这里想要的是将unique_field从内部级别移动到 modelA 级别,以便它返回:
{
"id": "92eb8314-3f26-4bf6-8cc0-83d2935434d9",
"unique_field": 0.1
### modelA fields here
"b_objects": [
{
"id": "1",
"random_field": 1.0
},
{
"id": "2",
"random_field": 5.0
}
]
}
100% 在特定 modelA 对象内的所有b_objects中,unique_field 的所有值都相等。
我试图在注释中添加 .annotate(unique_value=b_objects) 和其他,但它引发了一个错误:
QuerySet.annotate() 接收到非表达式:b_objects。
有没有办法使用查询集 API 实现这一点?
最佳回答
尝试添加 unique_field = 序列化程序。FloatField()
设置为 ModelASerializer
。你必须添加
这将从 ModelB
中获取unique_field
并将其添加到外部返回对象中。