从下面的代码中可以看出,我有一个定义自定义日期字段的中间模型。如何在关系模型中引用date_assigned字段。我正在尝试根据关系模型中的date_assigned字段查找在特定日期分配给“用户”(即CompanyProfile)的招标数量。 CompanyProfile(即用户)模型和Tender模型有一个共同点,它们都是通过ManyToMany关系与关键字模型建立关系。这就是我能够通过关键字模型找到分配给CompanyProfile的招标的方法。
这是我的最终目标。
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汇总结果时遇到问题。
答案 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'))
这是什么:
values
method(Tender.objects
属性); issued
字段值的查询集; Count
aggregate function名为tenders
,表示:
所有假设都采用一致的模型架构;我不得不做出一些猜测(您提供的代码无法正常工作,请查看上的指南。简而言之:将示例剥离到所需的最低限度,然后实际运行以确保它可以也为我们工作)。
如果您有一个现有查询并想对其进行注释,则只需应用相同的技术即可:
existing_queryset.values('tender_issued').annotate(
tenders=django.db.models.Count('tender_issued'))
其中tender_issued
是查询集中包含要分组和计数的值的任何字段。