1

我想要一个应用程序的通知系统,所以我正在研究一个名为 django-notifications 的 django 包。我了解所有这些,但 NOTIFICATION_SOFT_DELETE=True 设置。

我的意思是当我执行以下操作时:

from notifications import notify
notify.send(user, recipient=user, verb='you reached level 10')

deleted=False如果我没记错的话,这将进入数据库。我有以下内容settings.py

NOTIFICATIONS_SOFT_DELETE=True

更新deleted=Falsedeleted=True。但我不知道这种变化何时发生。文档中有一个 API 将所有通知标记为deleted=True

qs.mark_all_as_deleted() | qs.mark_all_as_deleted(收件人)

将查询集中的所有通知(也可选择按收件人过滤)标记为已删除=True。必须与 NOTIFICATIONS_SOFT_DELETE=True 一起使用。

但是如何将一些通知标记为deleted

4

2 回答 2

1

这是官方文件:

软删除

默认情况下,delete/(?P<slug>\d+)/从数据库中删除指定的通知记录。您可以通过以下方式将此行为更改为“将 Notification.deleted 字段标记为 True”:

添加到您的 settings.py:NOTIFICATIONS_SOFT_DELETE=True 使用此选项,未读和已读的 QuerySet 方法包含一个过滤器:deleted=False。同时开启了QuerySet方法deleted、active、mark_all_as_deleted、mark_all_as_active。请参阅 QuerySet 方法部分中的更多详细信息。

qs.mark_all_as_deleted() | qs.mark_all_as_deleted(recipient)

将查询集中的所有通知(也可选择按收件人过滤)标记为deleted=True. 必须与NOTIFICATIONS_SOFT_DELETE=True.

所以,如果你想标记一些要删除的通知,你可以做这些

  1. 在前端只需调用 APIdelete/(?P<slug>\d+)/
  2. 在后端查询通知和呼叫mark_all_as_deleted()mark_all_as_deleted(recipient)
于 2017-08-02T09:45:04.540 回答
0

这就是你所需要的。

安装 django-notifications-hq 并将“通知”作为应用添加到您在 settings.py 中安装的应用中,并将url('^inbox/notifications/', include(notifications.urls, namespace='notifications'))添加到您的网址模式。

确保您随后安装 django-notifications-rest,然后将“notifications_rest”安装为您在上面添加的应用程序旁边的应用程序。如果您使用的是 django v3.0 及以下版本,或者如果您使用的是 v3.1 及以上版本,请 添加 url('^notifications/', include('notifications_rest.urls'))添加path('^notifications/', include ('notifications_rest.urls'))在 url 文件中的 urlpatterns 下。

然后python manage.py makemigrations。这将创建一个休息端点,您可以在http://localhost:8000/notifications上访问它。正是从这个端点通过您的前端像反应一样,您可以发送一个 api 请求以获取所有未读请求,然后通过通过 api 发送另一个请求在 onclick 事件之后将所有请求标记为已读。

http://localhost:8000/notifications/all/ 将返回所有请求 http://localhost:8000/notifications/unread/ http://localhost:8000/notifications/delete/22 将删除 id 为 22 的请求 http:// /localhost:8000/notifications/mark-all-as-read/ 将在您可以访问的所有其他端点中将所有请求标记为已读。

但我相信在这种情况下,使用http://localhost:8000/notifications/unread/在页面加载时获取所有未读请求,然后单击,使用http://localhost:8000/notifications/mark-all-as-read /http://localhost:8000/notifications/delete/22分别删除或减少通知。

于 2021-03-10T12:53:51.447 回答