我的数据库中有一个元素列表,每个元素都有自己的日期时间字段。我想丢弃比今天更古老的元素,这意味着我只会看到未来的元素。
这是我目前的代码:
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)
答案 0 :(得分:2)
Django queryset具有字段查找功能。
来自Django文档,
字段查找是指定SQL WHERE子句的内容的方式。它们被指定为QuerySet方法filter(),exclude()和get()。
的关键字参数
有许多可用的内置查找,例如exact
,iexact
,contains
,gt
,gte
,lt
,lte
等等。有关详细信息,请参阅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())