我想在django管理界面上创建一个操作,允许一个文件被选择和打开,然后处理(与此处理的最终结果被保存下来)。我不知道如何在管理操作中做到这一点,所以我通过在操作关联的模型中添加一个可选的文件字段来解决这个问题,但这看起来既笨拙又浪费。
在单击一个管理操作后,我该如何提示用户选择一个文件?
谢谢。
首先创建表单
class SelectFileForm(forms.Form):
_selected_action = forms.CharField(widget=forms.MultipleHiddenInput)
file = forms.FileField()
将此代码添加到您的admin.py:
def select_file_action(modeladmin, request, queryset):
form = None
if 'apply' in request.POST:
form = ChooseFileForm(request.POST)
if form.is_valid():
file = form.cleaned_data['file']
count = 0
for item in queryset:
#do something with file
item.file = file
item.save()
count += 1
modeladmin.message_user(request, "File successfully selected")
return HttpResponseRedirect(request.get_full_path())
if not form:
form = SelectFileForm(initial={'_selected_action': request.POST.getlist(admin.ACTION_CHECKBOX_NAME)})
return render(request, 'select_file.html', {'items': queryset,'form': form, 'title':'File'})
select_file_action.short_description = "Choose file"
注册你的动作
actions = [select_file_action,]
And select_file template:
{% extends "admin/base_site.html" %}
{% block content %}
<form action="" method="post">{% csrf_token %}
{{ form }}
<ul>{{ items|unordered_list }}</ul>
<input type="hidden" name="action" value="select_file_action" />
<input type="submit" name="apply" value="Save" />
</form>
{% endblock %}