[英]Django File Upload ,can't add file field using form from instance object
I need to save a file upload object, but in two views... First views can save without problem, but the second i get nothing change in my object 我需要保存一个文件上传对象,但是有两个视图...第一个视图可以毫无问题地保存,但是第二个视图我的对象没有任何变化
I have a models.py 我有一个model.py
class file_upload(models.Model):
x= models.FileField()
y = models.FileField()
I have forms.py 我有forms.py
class form_upload(ModelForm):
class Meta:
model = file_upload
fields = ('x',)
widgets={
'x': FileInput(attrs={'class': 'form-control'}),
class form_upload_2(ModelForm):
class Meta:
model = file_upload
fields = ('y',)
widgets={
'y': FileInput(attrs={'class': 'form-control'}),
I have created an objects, also have uploaded a file on "x", i need to add file on "y" using form_upload_2 我创建了一个对象,也已经在“ x”上上传了一个文件,我需要使用form_upload_2在“ y”上添加一个文件
this is my views.py 这是我的views.py
data_upl_instance = file_upload.objects.get(id=1)
form = form_upload2(request.FILES,request.POST,instance=data_upl_instance)
if request.method == "POST":
if form.is_valid():
print(form.cleaned_data['y'])
form.save()
mydata['form'] = form
return render(request, "status.html", mydata)
this is my status.html 这是我的status.html
<form action="" method="post" enctype="multipart/form-data" class="form-horizontal">{% csrf_token %}
<div class="alert alert-danger">
{{ form }}
</div>
<button type="submit" class="btn red">Upload</button>
</div>
</form>
After i clicked submit, the result is 我单击提交后,结果是
Your form_upload_2
class don't have field y
. 您的
form_upload_2
类没有字段y
。 Change it to 更改为
class form_upload_2(ModelForm):
class Meta:
model = file_upload
fields = ('y',)
widgets={
'y': FileInput(attrs={'class': 'form-control'}),
Also follow naming conventions while naming a class. 命名类时,还请遵循命名约定。
file_upload
is not a good class name. file_upload
不是一个很好的类名。 Use FileUpload
. 使用
FileUpload
。 https://www.python.org/dev/peps/pep-0008/#class-names https://www.python.org/dev/peps/pep-0008/#class-names
Also your form, please try to change like this 也是您的表格,请尝试这样更改
if request.method == "POST":
form = form_upload2(request.FILES,request.POST,instance=data_upl_instance)
if form.is_valid():
print(form.cleaned_data['y'])
form.save()
else:
form = form_upload2(instance=data_upl_instance)
mydata['form'] = form
return render(request, "status.html", mydata)
Finally solve the problem, the problem is i have nothing in request.POST , i just need request.FILES .. so i change "request.POST" to "request.POST or None" 最后解决问题,问题是我在request.POST中什么都没有,我只需要request.FILES ..所以我将“ request.POST”更改为“ request.POST或None”
this is my new views.py 这是我的新views.py
data_upl_instance = file_upload.objects.get(id=1)
form = form_upload2(instance=data_upl_instance)
if request.method == "POST":
form = form_upload2(request.FILES,request.POST or None,instance=data_upl_instance)
if form.is_valid():
print(form.cleaned_data['y'])
form.save()
mydata['form'] = form
return render(request, "status.html", mydata)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.