比较日期字段的年和月是否大于某值

4 投票
3 回答
6087 浏览
提问于 2025-04-17 12:58

我打算执行这个查询:

today = datetime.date.today()
year=today.year
month=today.month
news=News.objects.filter(date__year__lt = year,date__month__lt=month)

注意:News对象里有一个叫做 date 的字段,但我遇到了这个错误:

Join on field 'date' not permitted. Did you misspell 'year' for the lookup type?

你有什么想法吗?

提前谢谢你!

3 个回答

0

在Django中,有一种方法可以根据日期和月份来筛选数据。

Sales.objects.filter(Date__month=month,Date__year=year)

销售模型:

class Sales(models.Model):
Amount = models.FloatField(blank=True, null=True)
Date = models.DateField()
updated_at = models.DateTimeField(auto_now=True)
VAT = models.BooleanField(default=True)

class Meta:
    ordering = ['id']

def __str__(self):
    return "{}-{}".format(self.Amount,self.Date)

def class_name(self):
    return self.__class__.__name__
2

Django在通过关系进行某些查询时会遇到问题,比如使用date__year__*这样的方式。我觉得他们正在为未来的版本解决这个问题。

这样做会得到一个可以接受的结果吗?

news = News.objects.filter(date__lt = datetime.date(year, month, 1))
12

你不能把 __lt 加到 __year__month 后面。只有最后一个带双下划线的部分被认为是限定符,前面的部分都被当作是遍历,也就是说,Django 会尝试在名为 date 的连接表中查找一个叫 year 的字段,这显然是不对的。

对于这种情况,你需要直接比较日期:

date = datetime.date(year, month, 1)
news = News.objects.filter(date__lt=date)

撰写回答