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
Вернуться на верх