类方法在Django中的queryset中的应用

类方法在Django中的queryset中的应用,django,Django,我不熟悉Django的高级概念,我发现自己对自定义方法等概念的应用有些困惑 基本上,这个简短的例子最能描述我的目标。 我有两个类,即供应商和订单。每个订单都有一个供应商。模型如下所示: class Order(models.Model): vendor_agreement = models.ForeignKey(VendorAgreement, on_delete = models.CASCADE) @property def get_vendor_agreement(s

我不熟悉Django的高级概念,我发现自己对自定义方法等概念的应用有些困惑

基本上,这个简短的例子最能描述我的目标。 我有两个类,即供应商和订单。每个订单都有一个供应商。模型如下所示:

class Order(models.Model):
    vendor_agreement = models.ForeignKey(VendorAgreement, on_delete = models.CASCADE)
    @property
    def get_vendor_agreement(self):
       ....
       return result
如您所见,我在
get\u vendor\u agreement
方法中封装了
order
vendor\u agreement
之间的所有业务逻辑

问题是否有任何优雅的方法可以获得与
订单
查询集相对应的不同的
供应商协议
列表?我的意思是,类似于
Order.objects.filter(…).vendor\u agreement()
,它将返回不同的供应商协议列表。 提前感谢。

来自官方:

在上面的示例中,manager reporter.article_集合中将提供以下方法

此外,您还可以使用将数据联接到一个查询中的方法

在您的情况下,代码应该如下所示:

order_list = Order.objects.filter(...).prefetch_related('vendor_agreement')
for order in order_list:
    print order
    for vendor_agreement in order.vendor_agreement_set.all():
        print vendor_agreement
我的示例中的代码只会命中数据库一次。

来自官方:

在上面的示例中,manager reporter.article_集合中将提供以下方法

此外,您还可以使用将数据联接到一个查询中的方法

在您的情况下,代码应该如下所示:

order_list = Order.objects.filter(...).prefetch_related('vendor_agreement')
for order in order_list:
    print order
    for vendor_agreement in order.vendor_agreement_set.all():
        print vendor_agreement

我的示例中的代码只会命中数据库一次。

预回迁相关,而不是选择相关。。。但无论如何-阅读此文档:预回迁相关,而不是选择相关。。。但无论如何,请阅读此文档: