首页 > 解决方案 > 如何清除在注册表单中上传文件时需要填写此字段的表单错误

问题描述

我正在尝试创建一个注册页面,其中多个用户必须在注册页面时上传文件,但是在遵循大多数教程之后,没有任何成果,以确保上传的文件成功,如果可以,请提供帮助试过uploaded_file = request.Files['document], fs = FileSystemStorage[], file upload way 我也试过if request.method == 'POST' and 'document' in request.FILES: upload_file = request.FILES ['document'] 也是如此。所以

     views.py
        def DistributorSignUpView(request):
            if request.method == 'POST':
                form = DistributorSignUpForm(request.POST, request.FILES)
                if form.is_valid():
                    form.save()
                    username = form.cleaned_data.get('username')
                    messages.success(request, 'Account was created for ' + username)
        
                    context = ({'form': form})
        
                    return render(request, 'dashboard.html', context)
            else:
                form = DistributorSignUpForm()
            return render(request, "distregister.html", context={'form': form})
    
        **forms.py**
        class DistributorSignUpForm(UserCreationForm):
            Tax_compliance_certificate = forms.FileField(required=True)
        
            class Meta(UserCreationForm.Meta):
                model = User
                fields = ['username', 'email', 'password1', 'password2', 'Tax_compliance_certificate']
        
            @transaction.atomic
            def save(self):
                user = super().save(commit=False)
                user.is_distributor = True
                user.save()
                distributor = Distributor.objects.create(user=user)
            
    
        distributor.Tax_compliance_certificate.add(*self.cleaned_data.get('Tax_compliance_certificate'))
                return user
    
    **HTML**
    
        <form method="POST" enctype="multipart/form-data">
                                {% csrf_token %}
                                <div class="input-group mb-3">
                                    <div class="input-group-append">
                                        <span class="input-group-text"><i class="fas fa-user"></i></span>
                                    </div>
                                    {{form.username}}
                                </div>
                                <div class="input-group mb-2">
                                    <div class="input-group-append">
                                        <span class="input-group-text"><i class="fas fa-envelope-square"></i></span>
                                    </div>
                                    {{form.email}}
                                </div>
                                <div class="input-group mb-2">
                                    <div class="input-group-append">
                                        <span class="input-group-text"><i class="fas fa-key"></i></span>
                                    </div>
                                    {{form.password1}}
                                </div>
                                <div class="input-group mb-2">
                                    <div class="input-group-append">
                                        <span class="input-group-text"><i class="fas fa-key"></i></span>
                                    </div>
                                    {{form.password2}}
                                </div>
        
        
                                  <div class="file-field">
                                    <input type="file" hidden id="file">
                                      <input type="button" value="Upload Tax Cert" onclick="btnFile()" 
 class="btnFile" name ="document">
                                      <span id="filename" class="filename">No file chosen</span>
                                  </div>
        
        
                                <div class="d-flex justify-content-center mt-3 login_container">
                                    <input class="btn login_btn" type="submit" value="Register Account">
                                </div>
        
                            </form>

标签: pythondjango

解决方案


您必须获取在 POST 请求中上传的文件列表

files_uploaded = self.request.FILES.getlist('my-file')

with然后,您使用 Python 的功能将它们上传到服务器。您还需要为您的输入标签命名,以便您可以在 POST 请求中找到它。

<input name="my-file"...>

推荐阅读