【问题标题】:Files not uploading in Django form文件未以 Django 形式上传
【发布时间】:2014-06-04 07:16:40
【问题描述】:

所以我有一个包含多个字段的模型,其中两个是photo 和一个video 字段。它们都是FileField 类型。在使用 FileField 类型之前,我已经制作了一个表格,并且一切正常,但由于某种原因,这次不是。 settings.py 配置正确,因为我可以通过另一个表单上传文件。

我可以进入 Django 管理员并从那里为 photovideo 字段添加图像和视频,然后创建新目录并存储图像和视频并且可以毫无问题地访问。我对这个有点难过。提前致谢。

这是我的模型:

def get_image_path(instance, filename):
    return os.path.join('images', str(instance.id), filename)

def get_video_path(instance, filename):
    return os.path.join('videos', str(instance.id), filename)

class User(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    email = models.EmailField()
    photo = models.FileField(upload_to=get_image_path, blank=True)
    video = models.FileField(upload_to=get_video_path, blank=True)

    def __unicode__(self):
        return self.first_name + ' ' + self.last_name + ' - ' + self.email

这是我的表格,ModelForm:

class UserForm(forms.ModelForm):
    class Meta:
        model = User

这是视图:

def index(request):
    latest_poll_list = Poll.objects.order_by('-pub_date')[:5]
    pollform = PollForm()
    choiceform = ChoiceForm()
    userform = UserForm()
    all_users = User.objects.all()
    if request.method == 'POST':
        pollform = PollForm(request.POST, request.FILES)
        choiceform = ChoiceForm(request.POST)
        userform = UserForm(request.POST)
        if pollform.is_valid():
            pollform.comments = pollform.cleaned_data['comments']
            pollform.save()
        else:
            pollform = PollForm()
        if choiceform.is_valid():
            choiceform.save()
        else:
            choiceform = ChoiceForm()
        if userform.is_valid():
            userform.save()
        else:
            userform = UserForm()
    context = {'latest_poll_list': latest_poll_list, 'pollform': pollform,
           'choiceform': choiceform, 'userform': userform, 'all_users': all_users}
    return render(request, 'polls/index.html', context)

这是与ModelForm关联的表单:

<form action="{% url 'polls:index' %}" method="POST" enctype="multipart/form-data">
    {% csrf_token %}
    {{ userform.as_p }}
    <input type="submit" value="Submit">
</form>

【问题讨论】:

    标签: python django


    【解决方案1】:

    确保您的form 标记中有enctype="multipart/form-data" 作为属性。

    <form method="POST" enctype="multipart/form-data">
        {% csrf_token %}
        <your form code>
    </form>
    

    【讨论】:

      【解决方案2】:

      其他一些答案(即this one)表明,如果您使用的是 FileField,则需要将request.FILES 传递给您的表单。这是你的问题吗?

      即改变这一行:

      userform = UserForm(request.POST)
      

      到:

      userform = UserForm(request.POST, request.FILES)
      

      编辑:

      Django 文档here.

      【讨论】:

        猜你喜欢
        • 2010-11-21
        • 1970-01-01
        • 1970-01-01
        • 2019-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-12
        • 2011-06-18
        相关资源
        最近更新 更多