丢弃Django queryset中的旧元素

时间:2014-05-20 16:33:00

标签: python django datetime

我的数据库中有一个元素列表,每个元素都有自己的日期时间字段。我想丢弃比今天更古老的元素,这意味着我只会看到未来的元素。

这是我目前的代码:

def get_dates_approved(request):
    user = request.user
    alreadyRated = [x.date.id for x in Ratings.objects.filter(rator=user)]
    dates = Dating.objects.filter((Q(creator=user) | Q(assignee=user)) & Q(accepted=True)) \
                      .exclude(id__in=alreadyRated)
    return dates

定义日期的字段是这个:

finalDate = models.DateTimeField(default=datetime.now)

1 个答案:

答案 0 :(得分:2)

Django queryset具有字段查找功能。

来自Django文档,

  

字段查找是指定SQL WHERE子句的内容的方式。它们被指定为QuerySet方法filter(),exclude()和get()。

的关键字参数

有许多可用的内置查找,例如exactiexactcontainsgtgteltlte等等。有关详细信息,请参阅Django queryset field lookups

回答你的问题

dates = Dating.objects.filter((Q(creator=user) | Q(assignee=user)) & Q(accepted=True)) \
                  .exclude(id__in=alreadyRated)

应该是

dates = Dating.objects.filter((Q(creator=user) | Q(assignee=user)) & Q(accepted=True)) \
                  .exclude(id__in=alreadyRated, finalDate__lt=datetime.today())

所以你的功能应该是

from datetime import datetime

def get_dates_approved(request):
    user = request.user
    alreadyRated = [x.date.id for x in Ratings.objects.filter(rator=user)]
    dates = Dating.objects.filter((Q(creator=user) | Q(assignee=user)) & Q(accepted=True)) \
                      .exclude(id__in=alreadyRated, finalDate__lt=datetime.today())