我正在尝试创建一个管理操作,将自定义时间增量添加到某个日期。时间增量将从中间页面的输入中读取。确认后,我将将该增量应用到之前选择的每个实例。使用此代码(我针对这个问题进行了简化)我无法获取输入的时间增量的值。我无法判断用户是否按下了“应用”按钮。
模型.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 %}
可能为时已晚,无法帮助OP,但我在遇到同样的问题时遇到了这个问题,并且在其他地方查看发生的情况并不是很明显。
当。。。的时候changelist_view
已处理(我们的视图POST
ing to)它看起来在request.POST
对于特定的键:_selected_action
其定义于django.contrib.admin.helpers
as 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
正如你在这里尝试做的那样。 (你想返回None
从处理你的块POST
数据,以便视图知道返回到列表视图。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)