Как мне запросить фильтр 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 для свойства поля, если оно не является подписным?

Благодарю.

0 ответов

Другие вопросы по тегам