DJANGO: ValidationError ["Значение 'journals__Start_Date' имеет недопустимый формат даты. Оно должно быть в формате ГГГГ-ММ-ДД."] - PullRequest
0 голосов
/ 10 октября 2018

Я не знаю, что я делаю неправильно в моем коде

Я хочу выполнить это:

 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, но он не фильтрует диапазон дат ...

1 Ответ

0 голосов
/ 10 октября 2018

Вы не можете передать 2-кортеж F -объектов в поиск __range.Это работает в том смысле, что wit напишет запрос, например:

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

Таким образом, он принимает str(..) объекта F(), который не , как Fобъекты должны быть переведены.

Но это, конечно, не имеет смысла.При этом __range можно эмулировать с __gte и __lte:

journal.objects.filter(
    Q(User=request.user) |
    Q(Date<b>__gte</b>=F('journals__Start_Date'), Date<b>__lte</b>=F('journals__End_Date'))
)
...