0

I dont know what I am doing wrong in my code

I want to perform this:

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

My models.py look like this:

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)

Do anyone have any idea what is wrong in my code?

I have used F expressions but it doesnt filter the date range...

Niladry Kar
  • 1,163
  • 4
  • 20
  • 50

1 Answers1

1

You can not pass a 2-tuple of F-objects to the __range lookup. It works in the sense that wit will write a query like:

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

So it takes the str(..) of the F() object, which is not how the F objects should be translated.

But this of course makes no sense. That being said, a __range can be emulted with an __gte and an __lte:

journal.objects.filter(
    Q(User=request.user) |
    Q(Date__gte=F('journals__Start_Date'), Date__lte=F('journals__End_Date'))
)
Willem Van Onsem
  • 443,496
  • 30
  • 428
  • 555