如何查询ManyToMany关系表中的自定义字段

时间:2018-07-03 21:44:08

标签: python django

从下面的代码中可以看出,我有一个定义自定义日期字段的中间模型。如何在关系模型中引用date_assigned字段。我正在尝试根据关系模型中的date_assigned字段查找在特定日期分配给“用户”(即CompanyProfile)的招标数量。 CompanyProfile(即用户)模型和Tender模型有一个共同点,它们都是通过ManyToMany关系与关键字模型建立关系。这就是我能够通过关键字模型找到分配给CompanyProfile的招标的方法。

这是我的最终目标。

enter image description here

from socket import *

s = socket(AF_INET,SOCK_STREAM)
s.connect(("www.python.org",80)) # connect
s.send("GET /index.html HTTP/1.0\n\n") # send request
data = s.recv(10000) # get response
s.close()

我能够找到与CompanyProfile相关的投标,但是在基于关系模型TendersKeywords中定义的投标issue_date汇总结果时遇到问题。

2 个答案:

答案 0 :(得分:0)

首先,我想修改您的模型

class tenderKeywords(models.Model):
    tender = models.ForeignKey(tender, related_name='tenderkeywords')
    keyword = models.ForeignKey(Keywords, related_name='tenderkeywords')
    date_assigned = models.DateField(default=timezone.now, blank=False, null=False)

然后:

count = tender.objects.filter(tenderKeywords__keyword__Keywords="", tenderKeywords__date_assigned= datetime)

Python开发人员在编写代码方面有一些标准。例如,模型名称的首字母应为大写。谢谢你。

答案 1 :(得分:0)

您显示的预期结果是model aggregation query。特别是,计算按特定字段分组的匹配计数是the Count aggregation的一种很好用法,该an annotate operation应用于model manager的查询集。

import django.db

Tender.objects.values('issued').annotate(
    tenders=django.db.models.Count('issued'))

这是什么:

所有假设都采用一致的模型架构;我不得不做出一些猜测(您提供的代码无法正常工作,请查看enter image description here上的指南。简而言之:将示例剥离到所需的最低限度,然后实际运行以确保它可以也为我们工作)。


如果您有一个现有查询并想对其进行注释,则只需应用相同的技术即可:

existing_queryset.values('tender_issued').annotate(
    tenders=django.db.models.Count('tender_issued'))

其中tender_issued是查询集中包含要分组和计数的值的任何字段。