Django Если оператор с логическими полями не работает - PullRequest
1 голос
/ 28 февраля 2020

Я получаю логическое значение из набора запросов, подобного следующему:

activo = Carros.objects.all().values_list('is_active', flat=True).filter(nombre='carro')

, тогда мой if будет выглядеть так:

if activo == True:
   raise forms.ValidationError('El Auto está activo')

, хотя переменная 'activo' получает значение True , которое не возвращает ошибку ValidationError.

Я установил переменную

a = True

и затем добавьте его в оператор if

if activo == True:
   raise forms.ValidationError('El Auto está activo')

И это работает.

В оболочке Python всякий раз, когда я выполняю запрос, я вижу результат, подобный этому

<QuerySet [True]>

Я не уверен, в чем проблема.

поле 'is_active' в модели:

is_active = models.BooleanField(blank=False, null=False, default=True)

Примечание: БД - Postgresql

1 Ответ

1 голос
/ 28 февраля 2020

Добавить 'use_pure': True в базу данных ОПЦИИ. Это заставляет mysql -connector- python использовать чистое python соединение вместо C расширения, где, как я считаю, ошибка существует, см. здесь

DATABASES = {
    'default': {
        'ENGINE': 'mysql.connector.django',
        'NAME': os.environ['MYSQL_DATABASE'],
        'USER': os.environ['MYSQL_USER'],
        'PASSWORD': os.environ['MYSQL_PASSWORD'],
        'OPTIONS': {
            'use_pure': True,
    }
}

Или В качестве альтернативы вы можете установить это в файле settings.py

'OPTIONS': {'use_pure': True }

Редактировать:

Поскольку ваш вывод переустанавливает набор запросов, вам понадобится проверить значение, чтобы убедиться, что это правда. Вы можете сделать это так

activo = <your query set>
print(activo[0])#should return True

if activo[0]:
   raise forms.ValidationError('El Auto está activo')


...