在 Django Orm 中过滤两个日期之间的日期
Filter dates between two dates in Django Orm
我有这个模型
class Batch(models.Model):
id = models.AutoField(primary_key=True);
start_date = models.DateField(null=False, blank=False, default=date.today);
end_date = models.DateField(null=False, blank=False, default=date.today);
description = models.TextField(blank=True);
name = models.CharField(max_length=22, null=False, blank=False, default=None);
date_created = models.DateField(verbose_name='Date created', default=date.today, editable=False);
school = models.ForeignKey(User,on_delete=models.CASCADE, default=None,blank=False,null=False);
我需要过滤“start_date”和“end_date”以检查指定日期是否介于两者之间。像这样
SELECT * FROM philiri.group_batch where (Date("04-11-1997") BETWEEN start_date and end_date)
我尝试使用 __range、__lte、__gte、__lt、__gt,但它不适合这个问题。
你可以先通过注释注入数据,然后用这个过滤:
from django.db.models import DateField, F, Value
from datetime import date
Batch.object.annotate(
<b>mydate=Value(date(1997, 11, 4), output_field=DateField())</b>
).filter(
<b>mydate__range=(F('start_date'), F('end_date'))</b>
)
但简单地过滤给定日期可能更简单:
from datetime import date
Batch.object.filter(
start_date__gte=date(1997, 11, 4),
end_date__lte=date(1997, 11, 4)
)
我有这个模型
class Batch(models.Model):
id = models.AutoField(primary_key=True);
start_date = models.DateField(null=False, blank=False, default=date.today);
end_date = models.DateField(null=False, blank=False, default=date.today);
description = models.TextField(blank=True);
name = models.CharField(max_length=22, null=False, blank=False, default=None);
date_created = models.DateField(verbose_name='Date created', default=date.today, editable=False);
school = models.ForeignKey(User,on_delete=models.CASCADE, default=None,blank=False,null=False);
我需要过滤“start_date”和“end_date”以检查指定日期是否介于两者之间。像这样
SELECT * FROM philiri.group_batch where (Date("04-11-1997") BETWEEN start_date and end_date)
我尝试使用 __range、__lte、__gte、__lt、__gt,但它不适合这个问题。
你可以先通过注释注入数据,然后用这个过滤:
from django.db.models import DateField, F, Value
from datetime import date
Batch.object.annotate(
<b>mydate=Value(date(1997, 11, 4), output_field=DateField())</b>
).filter(
<b>mydate__range=(F('start_date'), F('end_date'))</b>
)
但简单地过滤给定日期可能更简单:
from datetime import date
Batch.object.filter(
start_date__gte=date(1997, 11, 4),
end_date__lte=date(1997, 11, 4)
)