首页 > 解决方案 > Django:使用管理操作查询集扩展管理表单

问题描述

我有一个推送通知模型,用于将用户推送通知发送到他们的手机,但我现在要做的是一个管理操作,它将向多个用户发送推送通知。

所以这是我的管理员操作,它允许选择用户,然后是“发送推送通知”的操作:

在此处输入图像描述

到目前为止,我刚刚创建了一个动作和一个空的 HTML 模板,我认为我可以以某种方式扩展另一个应用程序,它是一个通知表单。

这是选择用户时我想打开的通知表单。

在此处输入图像描述

如您所见,这就是我们现在习惯发送通知的方式,一次只发送一个用户。所以基本上我想返回这个表单,但是使用之前从用户选项卡中选择的用户列表,我会简单地将其称为查询集,对吗?

{% extends "admin/....?html" %} {% block content %}
<form action="" method="post">
  {% csrf_token %}
  <p>Are you sure you want to execute this action on the selected items?</p>
  {% for order in orders %}
  <p>{{ order }}</p>
  <input type="hidden" name="_selected_action" value="{{ order.pk }}" />
  {% endfor %}

  <input type="hidden" name="action" value="update_status" />
  <input type="submit" name="apply" value="Update status" />
</form>
{% endblock %}

管理员.py

    def send_push_notification(self, request, queryset):
        # Create some kind of form and logic..??
        if 'apply' in request.POST:
            # The user clicked submit on the intermediate form.
            # Perform our update action:
            queryset.update(is_staff=False)  # This is just to test

            # Redirect to our admin view after our update has
            # completed with a nice little info message saying
            # our models have been updated:
            self.message_user(request,
                              "Changed status on {} users".format(queryset.count()))
            return HttpResponseRedirect(request.get_full_path())

        return render(request,
                      'send_push_request.html',
                      context={'orders': queryset})

标签: pythondjangodjango-rest-frameworkdjango-formsdjango-admin

解决方案


推荐阅读