Неожиданная ситуация возникает при использовании django для запроса q операции - PullRequest
0 голосов
/ 28 апреля 2020
from django.db import models


# Create your models here.

class Project(models.Model):
    project = models.CharField(max_length=128)


class Change(models.Model):
    project = models.ForeignKey(Project, on_delete=models.CASCADE)
    se = models.CharField(max_length=128, null=True)
    date = models.DateTimeField()

  • Это моя модель
In [92]: Project.objects.filter(Q(change__date__date__range=['2020-04-28','2020-04-28']),~Q(change__se__isnull=True)).count()
Out[92]: 8

In [93]: 

In [93]: Project.objects.filter(Q(change__date__date__range=['2020-04-28','2020-04-28']),Q(change__se__isnull=False)).count()
Out[93]: 9
  • Это мой запрос
  • Я не знаю, в чем разница между два, но результат отличается
  • 9 правильно
  • Мне действительно нужна помощь
  • Большое спасибо

1 Ответ

0 голосов
/ 29 апреля 2020
In [12]: str(Project.objects.filter(Q(change__date__date__range=['2020-04-28','2020-04-28']),~Q(change__se__isnull=True)).query)

Out [12]: 'SELECT "app_project". "Id", "app_project". "Project" FROM "app_project" INNER JOIN "app_change" ON ("app_project". "Id" = "app_change" . "project_id") WHERE (django_datetime_cast_date ("app_change". "date", \ 'UTC \', \ 'UTC \') МЕЖДУ 2020-04-28 И 2020-04-28 AND NOT ("app_project". "id "IN (ВЫБЕРИТЕ U0." Id "ОТ" app_project "U0 ВЛЕВО НАРУЖНОЕ СОЕДИНЕНИЕ" app_change "U1 ON (U0." Id "= U1." Project_id ") ГДЕ (U1." Se "НУЛЬ И И U0." Id " = "app_project". "id")))) '

В [13]: str (Project.objects.filter (Q (change__date__date__range = [2020-04-28', '2020-04- 28 ']), Q (change__se__isnull = False)). Query) Out [13]:' SELECT "app_project". "Id", "app_project". "Project" FROM "app_project" INNER JOIN "app_change" ON ("app_project "." id "=" app_change "." project_id ") ГДЕ (django_datetime_cast_date (" app_change "." date ", \ 'UTC \', \ 'UTC \') МЕЖДУ 2020-04-28 И 2020-04-28 И "app_ change". "Se" NOT NULL) '

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...