Django 查询带关联模型

4 投票
3 回答
8773 浏览
提问于 2025-04-15 20:16

对于下面这些模型:

class Customer(models.Model):
    id = models.IntegerField(primary_key=True)

class OrderA(models.Model):
    name = models.CharField(max_length=20)
    foo = models.FloatField()
    customer = models.ForeignKey(Customer)
    type = models.IntegerField()

class OrderB(models.Model):
    name = models.CharField(max_length=20)
    customer = models.ForeignKey(Customer)
    type = models.IntegerField()

我想一次性获取所有的客户对象,以及与它们相关的订单A和订单B对象,前提是订单A和订单B的类型都等于1。

3 个回答

0

我们来试试这个方法:

Customer.objects.get(orderA__type=1, orderB__type=1)

希望这对你有帮助

3

select_related() 是一个可以提前加载相关属性的功能:

Customer.objects.filter(ordera_set__type=1, orderb_set__type=1).select_related()
-3

你在评论中提到的,select_related 确实是朝相反的方向工作的,这点你说得对。

我在我的博客上写过一种方法,可以实现你想要的方向的查找,具体内容可以查看这里(抱歉,打广告了)。

撰写回答