Как мне запросить фильтр django с неподписанным диктовкой из уведомления?
Я сижу над этим уже несколько часов и никуда не денусь. Я работаю над приложением Django (Django 1.10, Postgres 9.6.5), которое использует уведомления Django. В их документации сказано, что я могу отправлять произвольные данные вместе с уведомлением.
Если я прослеживаю их документы и отправляю уведомление, в уведомлении панели администратора отображаются мои данные, успешно внесенные в data
поле, которое требуется для панели администратора в формате JSON:
{
"flag":"can_localise_user:00c3b6f2-33d0-43e7-814c-f448040750fd"
}
Я проверил базу данных, схема говорит,
CREATE TABLE "notifications_notification" (
"id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "unread" bool NOT NULL,
"actor_object_id" varchar(255) NOT NULL, "verb" varchar(255) NOT NULL,
"description" text NULL, "target_object_id" varchar(255) NULL,
"action_object_object_id" varchar(255) NULL, "timestamp" datetime NOT NULL,
...
"data" text NULL,
"level" varchar(20) NOT NULL
);
Я немного сбит с толку django-уведомления говорят, что он будет использовать postgres JSONField для хранения информации, когда в схеме они только ссылаются text
, но поскольку для админ-панели требуется допустимый JSON, а мои дополнительные параметры анализируются в JSON, плюс миграция говорит, что это JSONField, я остановлюсь на моем случае.
Однако я не могу фильтровать содержимое этого поля, независимо от того, что я пытаюсь... Документация Django говорит, что это должно работать так:
[Model].objects.filter([path__to__json__property]=[value])
но после бесконечных манипуляций единственный способ получить значение флага, с которым я хочу сравнить, выглядит так:
... [x.data["flag"] for x in Notification.objects.all()]
что объясняет, почему мои звонки:
Notification.objects.filter(data__flag=flag)
все скинуть ошибки. Конечно я не могу сделать:
Notification.objects.filter(data["flag"]=flag)
или же:
kwargs = {data["flags"]:flags}
Notification.objects.filter(**kwargs)
но, возможно, кто-то знает, как заставить это работать.
Вопрос:
Как я могу использовать фильтр Django для свойства поля, если оно не является подписным?
Благодарю.