【问题标题】:Filter dates between two dates in Django Orm在 Django Orm 中过滤两个日期之间的日期
【发布时间】:2020-08-27 22:05:53
【问题描述】:

我有这个模型

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 但它不适合这个问题。

【问题讨论】:

    标签: python django date orm


    【解决方案1】:

    你可以先通过注解注入数据,然后用这个过滤:

    from django.db.models import DateField, F, Value
    from datetime import date
    
    Batch.object.annotate(
        mydate=Value(date(1997, 11, 4), output_field=DateField())
    ).filter(
        mydate__range=(F('start_date'), F('end_date'))
    )

    但在给定日期进行过滤可能更简单:

    from datetime import date
    
    Batch.object.filter(
        start_date__gte=date(1997, 11, 4),
        end_date__lte=date(1997, 11, 4)
    )

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-24
      • 2021-09-03
      • 2019-11-08
      • 1970-01-01
      • 1970-01-01
      • 2021-10-30
      • 1970-01-01
      相关资源
      最近更新 更多