Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django表单验证与文件字段_Django - Fatal编程技术网

Django表单验证与文件字段

Django表单验证与文件字段,django,Django,我在使用基于类的通用视图CreateView通过表单发布文件时遇到了一些问题。以下是我到目前为止的情况。我不太确定如何处理该文件,以及request.FILES是否正在发布该文件,或者是否需要执行其他操作来捕获表单中的文件信息。我已经试着按照医生,但没有运气得到一些工作。文件作为空白字段上载 views.py # Create class FileUploadCreateView(BSModalCreateView): template_name = 'fileupload/creat

我在使用基于类的通用视图CreateView通过表单发布文件时遇到了一些问题。以下是我到目前为止的情况。我不太确定如何处理该文件,以及request.FILES是否正在发布该文件,或者是否需要执行其他操作来捕获表单中的文件信息。我已经试着按照医生,但没有运气得到一些工作。文件作为空白字段上载

views.py

# Create
class FileUploadCreateView(BSModalCreateView):
     template_name = 'fileupload/create-file.html'
     form_class = FileUploadModelForm
     success_message = 'Success: File was uploaded.'
     success_url = reverse_lazy('files_list')

     # Add required field my_user prior to posting form
     def form_valid(self, form):
         form = FileUploadModelForm(self.request.POST, self.request.FILES)
         self.object = form.save(commit=False)
         self.object.my_user = self.request.user
         self.object.file_status = 'ready'
         return super().form_valid(form)
forms.py

class FileUploadModelForm(BSModalModelForm):
class Meta:
    model = FileUpload
    fields = ['file_name', 'file_description', 'file_date_from', 'file_date_to','file_upload']

    widgets = {
        'file_name': forms.TextInput(attrs={'class':'form-control mb-3', 'id':'ruleset_name'}),
        'file_description': forms.Textarea(attrs={'rows':5}),
        'file_date_from': DatePickerInput(
            options={
                 "format": "MM/DD/YYYY",
                 "showClose": True,
                 "showClear": True,
                 "showTodayButton": True,
            }
        ),
        'file_date_to': DatePickerInput(
            options={
                 "format": "MM/DD/YYYY",
                 "showClose": True,
                 "showClear": True,
                 "showTodayButton": True,
            }
        ),
        'file_upload': forms.FileInput(attrs={'class':'form-control-file mb-3', 'id':'file_upload', 'type':'file', }),
    }
html


很确定您忘记将enctype=“multipart/form data”数据属性添加到模板中的表单标记


当然,您必须向我们提供模型、表单和模板代码。

在视图上工作了一段时间后,我能够使用清理后的数据通过以下方式获取文件以发布

# Add required fields prior to posting form
def form_valid(self, form):
    self.instance = form.save(commit=False)
    self.instance.my_user = self.request.user
    self.instance.file_status = 'ready'
    self.instance.file_upload = form.cleaned_data['file_upload']
    return super().form_valid(form)

发布html文件alsoAlso,看到表单和模型代码也会很棒。谢谢。添加了表单、模型和html。另外,这是使用django-bootstrap-modal-forms。请涵盖该部分。但这肯定是一个常见的错误。
class FileUpload(models.Model):
    """
    Class for the creation of file uploads
    """
    id = models.AutoField(primary_key=True)
    my_user = models.ForeignKey('users.MyUser', on_delete=models.CASCADE, related_name='file_uploads', default=None)
    file_name = models.CharField(max_length=255, blank=False, default=None, verbose_name='File Name')
    file_description = models.CharField(max_length=255, blank=False, default=None, verbose_name='File Description')
    file_date_from = models.DateField(default=None, null=True, blank=False, verbose_name='File Date From')
    file_date_to = models.DateField(default=None, null=True, blank=False, verbose_name='File Date To')

    STATUS_CHOICES = (
        ('ready','Ready'),
        ('processed', 'Processed'),
        ('archived','Archived'),
    )
    file_status = models.CharField(max_length=9, choices=STATUS_CHOICES, default=None, blank=False, verbose_name='File Status')
    file_create_date = models.DateTimeField(verbose_name='File Create Date', auto_now_add=True)
    file_upload = models.FileField(upload_to='uploads/%Y/%m/%d/', default=None, verbose_name='File Upload', blank=True)

    class Meta:
        ordering = ['-file_create_date']
        constraints = [
            models.UniqueConstraint(fields=['my_user','file_name'], name='Unique MyUser File')
        ]

    def __str__(self):
        return self.file_name
# Add required fields prior to posting form
def form_valid(self, form):
    self.instance = form.save(commit=False)
    self.instance.my_user = self.request.user
    self.instance.file_status = 'ready'
    self.instance.file_upload = form.cleaned_data['file_upload']
    return super().form_valid(form)