我不知道自己在代码中做错了什么
我要执行此操作:
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表达式,但是它不过滤日期范围...
答案 0 :(得分:1)
您不能将2个元组的F
对象传递给__range
查找。在某种意义上,机智将编写如下查询:
-- ...
WHERE date BETWEEN F(column1) AND F(column2)
因此,需要str(..)
对象的F()
,而不是{em> 应该如何翻译F
对象的对象。
但这当然没有道理。话虽如此,__range
可以与__gte
和__lte
完美结合:
journal.objects.filter(
Q(User=request.user) |
Q(Date__gte=F('journals__Start_Date'), Date__lte=F('journals__End_Date'))
)