我有2个对象contacts
,companies_contact
,我使用distinct()从联系人中获取不同的值
代码如下所示:
contacts = Contact.objects.filter(campaign=campaign)
companies_contacts = contacts.distinct('website')
因此,当我迭代 companies_contact
时,我得到以下输出...
>>>for i in companies_contacts:
i.created_at, i.website
(datetime.datetime(2018, 1, 9, 10, 57, 40, 447445, tzinfo=<UTC>), 'www.creamstone.com')
(datetime.datetime(2018, 1, 19, 6, 27, 32, 758898, tzinfo=<UTC>), 'www.facebook.com')
(datetime.datetime(2018, 1, 18, 6, 20, 41, 145358, tzinfo=<UTC>), 'www.heteja.com')
(datetime.datetime(2018, 1, 9, 12, 11, 17, 390755, tzinfo=<UTC>), 'www.kfc .com')
(datetime.datetime(2018, 1, 31, 6, 44, 40, 916231, tzinfo=<UTC>), 'www.mvg.com')
(datetime.datetime(2018, 1, 11, 12, 20, 55, 409986, tzinfo=<UTC>), 'www.subway.com')
(datetime.datetime(2018, 1, 9, 9, 14, 58, 607180, tzinfo=<UTC>), 'www.websit.com')
(datetime.datetime(2018, 1, 9, 6, 29, 53, 270203, tzinfo=<UTC>), 'www.website.com')
(datetime.datetime(2018, 1, 9, 9, 22, 22, 869395, tzinfo=<UTC>), 'www.websitest.com')
因此,根据我的轻描淡写 companies_contact
仅包含这么多数据,但是当我在 companies_contact
上应用 filter()
时上面输出中没有的不同日期,它也给了我结果。
companies_contacts.filter(created_at__startswith='2018-02-01')
上面的查询给了我结果,但是当我迭代companies_contact
时,这个created_at
值不存在
我不知道它为什么给出结果以及为什么它有效,但是如果日期不存在,我不想要结果。
最佳答案
我不确定你想做什么,所以我猜这可能是因为过滤器内的 startswith 标签。如果您将startswith标签更改为gte和lt会怎样:
1. 将 '2018-02-01' 解析为日期时间对象。
date_obj = parse('2018-02-01')
2.使用大于等于和小于进行过滤。
companies_contacts.filter(
created_at__gte=date_obj,
created_at__lt=date_obj + relativedelta(days=+1)
)
我正在使用 dateutil 包:
from dateutil.parser import parse
from dateutil.relativedelta import relativedelta
关于python - Django filter() 查询在数据中给出额外的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48570312/