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

这是我的模型:


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

https://img1.sycdn.imooc.com/652690ed0001025806540723.jpg

我如何在 Django queryset 中执行相同的查询?



婷婷同学_
浏览 142回答 3
3回答

慕的地6264312

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

一只甜甜圈

您应该查看 django 的select_lated查找。例子:Picture.objects.select_related('gold_item__gold_item_id').filter(gold_item_branch=gold_item_id)

喵喵时光机

你可以试试;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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python