假设我有两种模式:
class Testmodel1():
amount = models.IntegerField(null=True)
contact = models.ForeignKey(Testmodel2)
entry_time = models.DateTimeField()
stage = choicesfiled
class Testmodel2():
name = models.CharField()
mobile_no = models.CharField()
我想找出过去24小时Testmodel1
中创建的contact > 3
last = arrow.utcnow().shift(hours=-24).date()
的对象。
我正在申请查询:
n1=Testmodel1.objects.filter(entry_time__gte=last, stage=1).annotate(t_count=Count('contact')).filter(t_count__gt=3)
但它似乎不起作用。因为我得到一个空的查询集。
任何帮助都将不胜感激。
答案 0 :(得分:0)
只有部分答案。抱歉!你的代码看起来很好,所以我只是试图通过从不同的方向接近它来寻找解决方案。
以下是我在其中一个项目中构建(类似)类似代码的方法。
from datetime import timedelta, date
....
base_date = date.today()
start_date = base_date + timedelta(days=30)
end_date = base_date
possible_holidays = Holiday.objects.filter(
start_date__lte=start_date, end_date__gte=end_date)
从那里,你可以做一些像:
if possible_holidays.contact_set.count() > 3:
pass
这有用吗?
答案 1 :(得分:0)
问题是你的多对一关系是倒置的。这种关系是父子关系,父母可以有多个孩子,但孩子只能有一个孩子。在数据库中,此关系存储为子项的ForeignKey字段,该字段指向子项的父项。
在您的情况下,Testmodel1
是父级,Testmodel2
是小孩(Testmodel1
可以有多个Testmodel2
代表的联系人)这意味着ForeignKey字段应属于{ {1}},而不是Testmodel2
。
Testmodel1
使用此模型结构,您可以将class Testmodel1():
amount = models.IntegerField(null=True)
entry_time = models.DateTimeField()
stage = choicesfiled
class Testmodel2():
name = models.CharField()
mobile_no = models.ForeignKey()
parent = models.ForeignKey(Testmodel1,
related_name='contacts',
)
的联系人引用为Testmodel1
。您的查询应如下所示:
testmodel1.contacts.all()