问题描述
我想跨 4 个表(方向、层、金属堆栈和层)进行查询。除了我将在下面进一步解释的一部分之外,我已经完成了大部分查询。我需要一个包含列层、方向、堆栈名称、宽度的结果表。
在 sql 中,它会是这样的:
Class stack():
id
stackname
Class layers():
id
layers
Class directions():
id
directions
Class List():
directions_id= models.ForeignKey(directions)
layers_id= models.ForeignKey(layers)
Metalstack_id= models.ForeignKey(stack)
width
SELECT layers,directions,stackname,width
FROM List
JOIN layers l
ON l.id = List.layers_id
JOIN directions d
ON d.id = List.directions_id
JOIN stack s
ON s.id = List.Metalstack_id;
下面的查询让我得到了 layer_id、directions_id、stack_id、width 哪些值是正确的。但是,我不想获取 id,而是想获取图层、方向和堆栈名称值。我试着把它改成
values("stackname","directions","layers","pitch","space","width")
但它没有用。
views.py
list= List.objects
.filter(Metalstack_id__in=stackid)
.select_related('directions','layers','stackname')
.values("Metalstack_id","directions_id",layers_id","width")
解决方法
您可以根据需要尝试使用 Django 的 first()
、last()
查询集方法。
SomeModel.objects.filter(field_name=value).values("id","name").first()
完整文档:https://docs.djangoproject.com/en/3.2/ref/models/querysets/#first