Django获取的对象是两个模型的外键

Avittoria

我有以下三个模型,其中“预算”和“销售”均包含客户的外键:

class Customer(models.Model):
    name = models.CharField(max_length=45)
    # ...

class Budget(models.Model):
    customer = models.ForeignKey(Customer, on_delete=models.PROTECT)
    # ...

class Sale(models.Model):
    customer = models.ForeignKey(Customer, on_delete=models.PROTECT)
    # ...

我想获取一个同时存在Budget和Sale的所有Customer对象的queryset。最初,我尝试获取所有Budget和Sale对象的customer字段的交集:

customers = {
    budget.customer for budget in Budget.objects.all()
} & {
    sale.customer for sale in Sale.objects.all()
}

这将返回正确的对象,但是随着数据库大小的增加,效率将变得非常低下。

如何以更有效的方式检索这些对象?谢谢你的帮助!

威廉·范昂塞姆

您可以使用以下过滤器:

Customer.objects.filter(
    budget__isnull=False,
    sale__isnull=False
).distinct()

Django可以ForeignKey反向执行。它使用related_query_name=…参数[Django-doc]作为关系的名称。如果未指定,则使用related_name=…[Django-doc]参数,如果未指定,则使用小写的模型名称,因此budgetsale我们在这里做LEFT OUTER JOIN的SBudgetSale表,并检查是否两个有一个非空行。Django ORM可能会将其优化为INNER JOIN

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Django:使用通用外键链接两个模型

来自分类Dev

Django使用两个外键保存两个模型

来自分类Dev

Django:模型中用户的两个外键,得到不是加载页面的用户的外键

来自分类Dev

在Django数据模型中引用两个外键

来自分类Dev

Django,将两个外键添加到同一模型

来自分类Dev

如何在Django模板中制作包含两个与外键链接的模型的过滤摘要?

来自分类Dev

Django-具有两个以上外键的模型

来自分类Dev

具有Django模型,该模型可以属于其他两个模型之一(外键关系)

来自分类Dev

Django对同一个外键对象的两个字段进行过滤

来自分类Dev

Django对同一个外键对象的两个字段进行过滤

来自分类Dev

django表单:具有外键的一个<form>中的两个表单模型

来自分类Dev

Django 模型,2 个外键,对象逻辑

来自分类Dev

Django:注释最新外键的两个值

来自分类Dev

具有两个相同外键的Django Inlineformset

来自分类Dev

同一类Django的两个外键

来自分类Dev

检查对象是否存在于另一个模型外键字段中

来自分类Dev

Django模型未设置外键对象

来自分类Dev

Django Rest Framework Serializer:获取两个模型的字段

来自分类Dev

如何在 Django 中使用外键将对象从一个模型获取到另一个模型

来自分类Dev

Django模型外键获取属性

来自分类Dev

Django(模型):如何从外键获取实例

来自分类Dev

定义两个外键

来自分类Dev

两个外键的复合主键

来自分类Dev

EF生成的两个外键

来自分类Dev

加入两个相同的外键

来自分类Dev

两个可能表的外键

来自分类Dev

ER模型生成为外键生成两个属性

来自分类Dev

如何使相同模型的两个外键一起唯一?

来自分类Dev

如何验证模型的两个(外键)相关字段的唯一性?

Related 相关文章

热门标签

归档