简体   繁体   English

Django File Upload,无法使用实例对象中的表单添加文件字段

[英]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 我单击提交后,结果是

  • Printed "None" on terminal 在终端上打印“无”
  • Form is valid but nothing change, file cant be uploaded 表格有效,但没有任何变化,无法上传文件

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM