Django - 表单 FileField 错误“此字段是必需的”

jes*_*tem 3 python django django-forms

我想将 Post 表单添加到我的 django 项目中,但 FileFiled 有问题。这是我的代码:

表格.py

class PostForm(forms.ModelForm):

   class Meta:
      model = Post
      fields = [
        'author',
        'image',
        'title',
        'body'
    ]
Run Code Online (Sandbox Code Playgroud)

模型.py

class Post(models.Model):
    author = models.ForeignKey('auth.User')
    image = models.FileField(default="", blank=False, null=False)
    title = models.CharField(max_length=200)
    body = models.TextField()
    date = models.DateTimeField(default=timezone.now, null=True)

    def approved_comments(self):
        return self.comments.filter(approved_comment=True)

    def __str__(self):
        return self.title
Run Code Online (Sandbox Code Playgroud)

如果有帮助。我也设置enctype="multipart/form-data<form>

感谢帮助。

Iai*_*ton 9

文档

您需要传递request.FILES给绑定表单。

bound_form = PostForm(request.POST, request.FILES)
Run Code Online (Sandbox Code Playgroud)


Exp*_*tor 9

class Post(models.Model):
    author = models.ForeignKey('auth.User')
    image = models.FileField(upload_to='path')
    title = models.CharField(max_length=200)
    body = models.TextField()
    date = models.DateTimeField(default=timezone.now, null=True)

    def approved_comments(self):
        return self.comments.filter(approved_comment=True)

    def __str__(self):
        return self.title
Run Code Online (Sandbox Code Playgroud)

您需要在文件字段中提及upload_path

添加enctype="multipart/form-data到您的表单

并为了获取文件

PostForm(request.POST, request.FILES)
Run Code Online (Sandbox Code Playgroud)

如果您需要将该字段设为可选

class PostForm(forms.ModelForm):
image = forms.FileField(required=False)
   class Meta:
      model = Post
      fields = [
        'author',
        'image',
        'title',
        'body'
    ]
Run Code Online (Sandbox Code Playgroud)