如何查询通知中包含无法下标的django过滤器?

时间:2018-07-23 21:52:57

标签: json django django-queryset django-notification

我现在已经坐了几个小时,却一无所获。我正在开发一个使用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过滤器?

谢谢。

0 个答案:

没有答案