【问题标题】:Django filter() Query giving extra result in dataDjango filter() 查询在数据中提供额外结果
【发布时间】:2018-07-12 05:23:19
【问题描述】:

我有 2 个对象 contactscompanies_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


【解决方案1】:

我不确定您要做什么,所以我猜这可能是因为过滤器内部的 startswith 标记。如果您使用 gte 和 lt 更改 startwith 标签会怎样:
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

【讨论】:

    猜你喜欢
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-19
    • 2021-04-20
    • 1970-01-01
    • 2021-01-14
    • 1970-01-01
    相关资源
    最近更新 更多