在Django模型中合并__range和__startswith

时间:2017-09-06 07:06:55

标签: django python-3.x django-models

我想创建一个提供一些数据计数的函数。但是有两种情况发生:

  1. 每周电子邮件数 - 为此我使用 __ range
  2. 今天的电子邮件数量 - 为此我使用 __ startswith
  3. 我的功能如下:

    def count_emails(from_date=None,to_date=None):
        emails = Emails.objects.all()
        if to_date is None:
            to_date = from_date
        count = emails.filter(initial_date__range=(from_date,to_date)).count()
        return count
    

    期望:

    def count_emails(from_date=None,to_date=None):
        emails = Emails.objects.all()
        if to_date is None:
            count = contact.filter(initial_date__stratswith=from_date).count()
        else:
           count = emails.filter(initial_date__range=(from_date,to_date)).count()
        return count
    

    因此,对于今天的电子邮件计数,我只传递了from_date,但如果我使用__startswith代替__range,则计数显示为0(零),那么计数将是正确的。

    所以我需要将它变成单个函数和单个变量。

    我该怎么做?

2 个答案:

答案 0 :(得分:0)

当您尝试设置to_date = from_date时,您的范围是空的,但如果您的目标是任何情况下的一个代码行,则可以将范围更改为gtelt

def count_emails(from_date=None, to_date=None):
    emails = Emails.objects.all()
    if to_date is None:
        to_date = from_date
    to_date = to_date + timedelta(1)
    count = contact.filter(initial_date__gte=from_date, initial_date__lt=to_date)).count()
    return count

答案 1 :(得分:0)

我试过了一件事。

def count_emails(from_date=None, to_date=None):
    emails = Emails.objects.all()
    if to_date is None:
        from_date = datetime.datetime.combine(from_date, datetime.time.min)
        to_date = from_date + timedelta(hours=23, minutes=59)
    count = emails.filter(initial_date__range=(from_date, to_date))).count()
    return count

这对我来说只有一周和一天的帮助