在admin中添加自定义actions并填写自定义参数

Posted ameile

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在admin中添加自定义actions并填写自定义参数相关的知识,希望对你有一定的参考价值。

https://www.hoboes.com/Mimsy/hacks/django-actions-their-own-intermediate-page/

    class 模型管理类(admin.ModelAdmin):
        actions = [自定义方法名]
    #下面以行政部分发放多个办公用具给某领用人的操作来说明
    #定义一个选择员工的页面form,将来在动作中选择执行时会跳转到模板页面,同时填写参数,这里是选择员工
    class StaffSelectForm(forms.Form):
        #下面是获取选择的记录
        _selected_action = forms.CharField(widget=forms.MultipleHiddenInput)
        #这里是将来要选择的员工处,本方法就是要通过它传参
        _staff = forms.ModelChoiceField(Staff.objects, label=员工)

    def 自定义方法名(self, request, queryset):
        form = None
        print(request.POST)
        if cancel in request.POST:
            self.message_user(request, 设备出库取消)
            return
        elif _staff in request.POST:
            form = self.StaffSelectForm(request.POST)
            if form.is_valid():
               #这里从form中获取到传过来的参数_staff
                staff = form.cleaned_data["_staff"]
                print(request.POST.getlist(admin.helpers.ACTION_CHECKBOX_NAME))
                for q in queryset:
                    #这里对要进行的操作自定义编写
                   #我这里是把选择的记录当前领取人作了修改
                    q.owner = staff
                    q.save()
                self.message_user(request, f{staff}成功领取{queryset.count()}台设备)
                return HttpResponseRedirect(request.get_full_path())
        if not form:
            #这里是点击执行自定义动作时初始化form表单
            #把选择的记录值传过去前端页面
            form  = self.StaffSelectForm(initial={_selected_action: request.POST.getlist(admin.helpers.ACTION_CHECKBOX_NAME)})
            return render(
                request,
                APP名称/对应的自定义模板.html,
                {devs: queryset, form: form, path:request.get_full_path(), action: 自定义方法名, title: u文具批量领取}

            )
    自定义方法名.short_description = "批量领取"                          

2、对应在的自定义动作模板:modify_owner.html

#继承默认模板,统一样式
{% extends "admin/base_site.html" %}
{% block extrahead %}
{{ block.super }}
<link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet">
<style>
  .div_content {
    width: 100%;
    text-align: center;
  }
#自定义样式
</style>
{% endblock %}
{% block content %}
  <div class=‘container‘>
    <div class="row">
    <form method="POST", action="{{ path }}">
      {% csrf_token %}
      {{ form.as_p }}
      <!-- 下面是手动显示字段,方便精准控件显示 -->
      <!-- {% for field in form %}
        <div class="row margin-top">
          <div class="col-md-6 text-right">{{ field.label_tag }}</div><div class="col-md-6 text-left">{{ field }}</div>
        </div>
      {% endfor %} -->
      <p class="row text-center margin-top" style="padding-left: 150px;">
        <input type="hidden" name="action" value="{{ action }}" />
        <input type="submit" class="btn btn-info btn-sm" name="ok" value="确 认" />
        <input type="submit" class="btn btn-info btn-sm margin-left" name="cancel" value="取 消" />
        
      </p>
    </form>
  </div>
#以下是非关键代码,我这里是列出选择了哪些项,所以后端传过来的参数“devs”
    <div class="row">
      <div class="col-md-3 col-md-offset-6">
        <div class="text-center">
          <p style="font-size: 14px; font-weight: bolder;">出库设备信息所下:</p>
        </div>
        <ul>
          {% for d in devs %}
            <li>{{ d.devNO }}&nbsp;当前归属:{{ d.owner }}</li>
          {% endfor %}
        </ul>
      </div>
    </div>
  </div>
{% endblock %}

 

以上是关于在admin中添加自定义actions并填写自定义参数的主要内容,如果未能解决你的问题,请参考以下文章

dcat-admin行操作自定义弹框页面

django自定义Admin actions

添加自定义按钮以链接到另一个模型 Django Admin

Django实现自定义template页面并在admin site的app模块中加入自定义跳转链接

如何在 Django-admin 中添加自定义搜索框?

UWP: 妙用自定义 Action 以简化并重用代码