【发布时间】:2018-07-12 05:23:19
【问题描述】:
我有 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 值不存在
我不知道它为什么会给出结果以及为什么会起作用,但是如果日期不存在,我不想要结果。
【问题讨论】:
-
既然您写了
distinct('website'),那么在第一个查询中,您可能只是忽略了这些行。 -
@WillemVanOnsem 我使用了
distinct('website'),因为在获得不同的数据后,我需要仅从那些数据集中而不是从被忽略的行中获取不同日期的信息。 -
那么你也应该在第二个查询中使用
distinct('website').. -
好的..那么根据实现它永远不会给我正确的数据。这个迭代和过滤查询我在不同的函数中使用过,并且在不同的函数中不同。所以,我将不同的对象传递给其他函数进行迭代。那么,有没有什么好的方法来实现呢?在此先感谢... :)
标签: python django orm django-orm