首页 > 解决方案 > DJANGO: ValidationError ["'journals__Start_Date' 值的日期格式无效。它必须是 YYYY-MM-DD 格式。"]

问题描述

我不知道我在代码中做错了什么

我想执行此操作:

 journal.objects.filter(Q(User=request.user) | Q(Date__range=[('journals__Start_Date'),('journals__End_Date')])

我的 models.py 看起来像这样:

class journal(models.Model):
    User = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE,null=True,blank=True)
    Company = models.ForeignKey(company,on_delete=models.CASCADE,null=True,blank=True,related_name='Companyname')
    Date = models.DateField()
    By = models.ForeignKey(ledger1,on_delete=models.CASCADE,related_name='Debitledgers')
    To = models.ForeignKey(ledger1,on_delete=models.CASCADE,related_name='Creditledgers')
    Debit = models.DecimalField(max_digits=10,decimal_places=2)
    Credit = models.DecimalField(max_digits=10,decimal_places=2)

class selectdatefield(models.Model):
    Journal = models.ForeignKey(journal,on_delete=models.CASCADE,null=True,blank=True,related_name='journals')
    Start_Date = models.DateField(blank=True, null=True)
    End_Date = models.DateField(blank=True, null=True)

有人知道我的代码有什么问题吗?

我使用了 F 表达式,但它没有过滤日期范围......

标签: djangodjango-modelsdjango-views

解决方案


您不能将 2 元组的F-objects 传递给__range查找。它的工作原理是 wit 将编写如下查询:

-- ...
WHERE date BETWEEN F(column1) AND F(column2)

所以它需要对象str(..)F(),这不是F对象应该如何翻译。

但这当然没有意义。话虽如此, a__range可以用 an__gte和 an模拟__lte

journal.objects.filter(
    Q(User=request.user) |
    Q(Date__gte=F('journals__Start_Date'), Date__lte=F('journals__End_Date'))
)

推荐阅读