【问题标题】:Django admin action with intermediate page: not getting info back带有中间页面的 Django 管理操作:没有返回信息
【发布时间】:2018-10-16 23:35:09
【问题描述】:

我正在尝试创建一个将自定义时间增量添加到某个日期的管理操作。时间增量将从中间页面的输入中读取。确认后,我会将该增量应用于之前选择的每个实例。使用此代码(我为这个问题简化了)我无法获得输入的时间增量的值。我不知道用户是否按下了“应用”按钮。

models.py

class Match(models.Model):
    date_of_match=models.DateTimeField()

admin.py

class MatchAdmin(admin.ModelAdmin):
    actions=('move_date',)
def move_date(self,request,queryset):
    if 'apply' in request.POST:
        #to do, add timedelta to date_of_match
        print("I'M IN!")
    return render(request.'admin/move_date.html',{'matches':queryset})
move_date.short_description="Move date"

move_date.html

{% extends "admin/base_site.html" %}
{% block content %}
<form action="" method="post">{% csrf_token %}
    <p>How much delta?<p>
    <input type="number" step="1" value="days"/>
    <input type="hidden" name="action" value="move_date" />
    <input type="submit" name="apply" value="Apply"/>
</form>
{% endblock %}

【问题讨论】:

标签: python django action


【解决方案1】:

帮助 OP 可能为时已晚,但我在遇到同样问题时遇到了这个问题,并且在其他地方寻找发生的事情并不是很明显。

changelist_view 被处理时(我们正在POST 处理的视图),它会在request.POST 中查找特定键:_selected_action,它在django.contrib.admin.helpers 中定义为ACTION_CHECKBOX_NAME。我使用了内置在管理员中的删除操作以供参考,它在模板中以这种方式使用它:

{% for obj in queryset %}
  <input type="hidden" name="{{ action_checkbox_name }}" value="{{ obj.pk|unlocalize }}">
{% endfor %}

那么在您的上下文中,您只需要:

context = {
    'queryset': queryset,  # method param
    'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
}

现在,当您 POST 表单时,您的方法会再次被调用,您可以在此处尝试检测/处理 POST。 (您想从处理您的POST 数据的块中返回None,以便视图知道返回到列表视图。)

【讨论】:

    猜你喜欢
    • 2011-10-05
    • 1970-01-01
    • 2011-11-09
    • 2018-11-16
    • 1970-01-01
    • 2017-10-03
    • 2010-10-27
    • 1970-01-01
    • 2017-08-05
    相关资源
    最近更新 更多