为了账号安全,请及时绑定邮箱和手机立即绑定

如何对 django 查询集中的多个字段执行联接?

如何对 django 查询集中的多个字段执行联接?

婷婷同学_ 2023-10-11 20:10:26
这是我的模型:class Picture(models.Model):    picture_id = models.IntegerField(db_column='PictureID', primary_key=True)    gold_item =models.ForeignKey(GoldItem,db_column="GoldItemID",related_name="pictures",on_delete=models.CASCADE)    gold_item_branch = models.ForeignKey(GoldItemBranch, db_column="GoldItemBranchID", related_name="pictures", on_delete=models.CASCADE)    code = models.CharField(db_column='Code', max_length=5, blank=True, null=True)class GoldItemBranch(models.Model):    gold_item_branch_id = models.IntegerField(db_column='GoldItemBranchID', primary_key=True)    gold_item_id = models.IntegerField(db_column='GoldItemID')    gold_item_branch_name = models.CharField(db_column='GoldItemBranchName', max_length=30, blank=True, null=True)我需要对上述模型中的多个列执行连接操作。列是 gold_item_id 和 gold_item_branch_id我写了 SQL 查询:select * from Pictures join GoldItemBranches on Pictures.GoldItemID = GoldItemBranches.GoldItemID and Pictures.GoldItemBranchID = GoldItemBranches.GoldItemBranchID我如何在 Django queryset 中执行相同的查询?
查看完整描述

3 回答

?
慕的地6264312

TA贡献1817条经验 获得超6个赞

要执行多列联接,请使用FilteredRelation。



查看完整回答
反对 回复 2023-10-11
?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

您应该查看 django 的select_lated查找。

例子:

Picture.objects.select_related('gold_item__gold_item_id').filter(gold_item_branch=gold_item_id)


查看完整回答
反对 回复 2023-10-11
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

你可以试试;


ids_list = GoldItemBranch.objects.all().values_list('id', flat=True)

results = Picture.objects.filter(gold_item__id__in = ids_list).select_related('gold_item_branch')

如果你想查看实际执行了哪个查询:


results.query

还有另一种方法可以使用 django 运行原始 SQL。所以,在你的情况下,它会是这样的:


raw_results = Picture.objects.raw('''select * from Pictures 

                       join GoldItemBranches 

                       on Pictures.GoldItemID = GoldItemBranches.GoldItemID 

                       and Pictures.GoldItemBranchID = GoldItemBranches.GoldItemBranchID''')

并迭代这个原始查询结果


for raw_result in raw_results:

    print(raw_result)

查看完整回答
反对 回复 2023-10-11
  • 3 回答
  • 0 关注
  • 141 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信