Найти - Пользователи
Полная версия: HStoreField и isnull: баг?
Начало » Django » HStoreField и isnull: баг?
1
int_0x80
Приветствую, коллеги.

Есть модель с полем HStoreField.
class M(Model):
     hstore = HStoreField(default={})
Делаю такой запрос:
M.objects.filter(hstore__any_key__isnull=True)
При этом в hstore нет поля any_key. Т.е. получаем некую альтернативу такому запросу:
M.objects.exclude(hstore__has_key='any_key')
Получаю ошибку SQL сервера:
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.
Если посмотреть на генерируемый SQL, то получаем такой WHERE:
WHERE "app_m"."hstore" -> 'any_key' IS NULL
А это некорректный запрос. Правильно так:
WHERE ("app_m"."hstore" -> 'any_key') IS NULL

Я так понимаю это баг?

p.s django 1.8, hstore из contrib.postgresql
FishHook
Делаю такой запрос:
Т.е. получаем некую альтернативу такому запросу:
Нет, не получаем. ОРМ обрабатывает эти конструкции по разному, следовательно на выходе разный результат. С чего вы взяли, что так можно делать? Я не увидел в документации, что с HStoreField допустимы __isnull запросы.
int_0x80
FishHook
Нет, не получаем.
Да, Вы правы. Но судя по документации к hstore (http://www.postgresql.org/docs/9.4/static/hstore.html), значением ключа может быть NULL (и orm тоже позволяет это сделать), а так же, если ключ не представлен, то возвращается NULL, следовательно напрашивается операция __isnull.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB