name當我使用 Django 上傳檔案時,我想為該欄位設定一個初始值“test” 。這是我嘗試過的views.py:
class UploadFile(CreateView):
form_class = UploadFileForm
template_name = "tool/upload.html"
success_url = reverse_lazy('tool:index')
fields = ['file',]
def get(self, request, *args, **kwargs):
form = self.form_class()
return render(request, self.template_name, {'form': form})
def post(self, request, *args, **kwargs):
form = self.form_class(request.POST, request.FILES)
if form.is_valid():
form.save()
return redirect(self.success_url)
else:
return render(request, self.template_name, {'form': form})
并在forms.py:
class UploadFileForm(forms.ModelForm):
class Meta:
model = CheckFile
fields = ['file', ]
def __init__(self, file, *args, **kwargs):
file = kwargs.pop('file')
super(UploadFileForm, self).__init__(*args, **kwargs)
if file:
self.fields['name'] = "test"
但我最終遇到以下錯誤: TypeError: UploadFileForm.__init__() missing 1 required positional argument: 'file'
我不明白為什么我一直有這個錯誤。請你幫助我好嗎?
謝謝!
編輯:這是 HTML 表單。
{% extends 'base.html' %}
{% block content %}
<h1>Enregistrer les tarifs</h1>
<form method="POST">
<p>
{% csrf_token %}
{{ form.as_p }}
</p>
<button type="submit">Save</button>
</form>
{% endblock %}
uj5u.com熱心網友回復:
你做的太多了,這file = kwargs.pop('file')沒有任何意義:資料被傳遞request.FILES并傳遞給ModelForm,因此你ModelForm可以看起來像:
class UploadFileForm(forms.ModelForm):
class Meta:
model = CheckFile
fields = ['file', ]
# no __init__
您的觀點也是如此:Django 將自動創建表單并相應地傳遞資料。如果要指定 的名稱CheckFile,可以在form_valid方法中執行此操作:
class UploadFileView(CreateView):
form_class = UploadFileForm
template_name = "tool/upload.html"
success_url = reverse_lazy('tool:index')
def form_valid(self, form):
form.instance.name = 'test'
return super().form_valid(form)
如果您要提交檔案,則應指定enctype="multipart/form-data":
<form method="POST" enctype="multipart/form-data">
<p>
{% csrf_token %}
{{ form.as_p }}
</p>
<button type="submit">Save</button>
</form>
這就是所有必要的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/412655.html
標籤:
