我现在已经坐了几个小时,却一无所获。我正在开发一个使用Django Notifications的Django应用(Django 1.10,Postgres 9.6.5)。他们的文档说,我可以随通知一起发送任意数据。
如果我关注他们的文档并发送通知,则管理面板通知会显示我的数据已成功进入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-notifications有点困惑,说它在架构中仅引用text
时会使用postgres JSONField来存储信息,但是由于admin-panel需要有效的JSON并且我的额外参数是解析为JSON,再加上migration表示它是JSONField,请耐心等待。
但是,无论如何尝试,我都无法过滤该字段的内容... Django documentation说它应该像这样工作:
[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过滤器?
谢谢。