Djongo query_set с фильтром по булевому полю
У меня есть приложение django с djongo в качестве драйвера базы данных. Моя модель проста:
from django.db import models
from djongo.models import ObjectIdField
class TmpModel(models.Model):
_id = ObjectIdField()
is_deleted = models.BooleanField(default=False)
Когда я запускаю в shell простую команду фильтрации:
>>> TmpModel().save()
>>> TmpModel(is_deleted=True).save()
>>> TmpModel.objects.filter(is_deleted=False).all()
Я получил ошибку:
Как узнать, что не так?
Используйте поля модели djongo
для всех имеющихся у вас полей вместо полей django
from djongo import models
class TmpModel(models.Model):
_id = models.ObjectIdField()
is_deleted = models.BooleanField(default=False)
Похоже, что это проблема с разбором булевых условий SQL в Djongo (GitHub issue #562). На данный момент решением является использование __in
запроса:
TmpModel.objects.filter(is_deleted__in=[False]).all()
Это было исправлено в djongo@8587ea7 (по состоянию на декабрь 2022 года, планируемый выпуск не планируется).
pip install git+https://github.com/doableware/djongo.git@8587ea766e4610da5f31112f7b134699e2d603ee
Обход для Djongo <= 1.3.6 из doableware/djongo#562 (комментарий 892486144):
from djongo.base import DatabaseWrapper from djongo.operations import DatabaseOperations class PatchedDatabaseOperations(DatabaseOperations): def conditional_expression_supported_in_where_clause(self, expression): return False DatabaseWrapper.ops_class = PatchedDatabaseOperations