繁体   English   中英

Django:4 个表中的 select_related() / prefetch_related()

[英]Django: select_related() / prefetch_related() among 4 tables

我想跨 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")但没有奏效。

视图.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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM