【问题标题】:Upload image via ModelForm in django在 django 中通过 ModelForm 上传图片
【发布时间】:2018-05-22 22:29:16
【问题描述】:

当我尝试提交表单时,它显示“此字段为必填项”。 即使我提供了图像和其他详细信息。

forms.py 文件

from django.forms import ModelForm
from .models import Status

class CreatePost(ModelForm):

    class Meta:
        model=Status
        fields = ["username","text","privacy","image"]

models.py 文件

class Status(models.Model):
    title=models.CharField(max_length=20,default="updated status")
    username = models.ForeignKey('User',on_delete=models.CASCADE)
    #username = models.CharField(max_length=20)
    text = models.TextField(blank=True, null=True)
    image = models.ImageField(upload_to="media/image",null=True)
    time = models.DateTimeField(auto_now=True)
    privacy = models.CharField(max_length=5, blank=True, null=True)
    gid = models.IntegerField(blank=True, null=True)
    dp = models.SmallIntegerField(blank=True, null=True)

    class Meta:
        #unique_together = (('username', 'dp'),)
        #managed = False
        db_table = 'status'

view.py

def create_post(request):
    form=CreatePost(request.POST or None)
    if request.method=="POST":
        if form.is_valid():
            instance=form.save(commit=False)
            instance.time=time.time()
            instance.save()
            return redirect('post',)

    return render(request,"uposts/createpost.html",{'form':form})

createpost.html

{% extends "friendsbook/structure.html" %}
{% block content %}
<form action="" method="post">
    {%csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Save">
</form>

{% endblock %}

点击保存按钮后显示的内容

我只在表单中填写 4 个字段,因为所有其他字段都可以为空。对于时间字段,我在 views.py 中通过给出时间来处理它。

【问题讨论】:

  • 你是哪个版本的django?
  • 目前我在 2.0

标签: python django django-models django-forms modelform


【解决方案1】:

您必须像这样添加 multipart/form-data 来修改模板:

<form method="post" enctype="multipart/form-data">
{% csrf_token %}
<input type="file" name="myfile">
<button type="submit">Upload</button>
</form>

在views.py中,您可以使用request.FILES访问上传的文件。

【讨论】:

  • 你能告诉我如何使用 request.FILES
  • 你可以在 request.POST 中使用 like 这个myfile = request.FILES['myfile']
  • 使用request.FILES后还是报同样的错误
  • 能把 request.POST 和 form.errors 的输出粘贴到这里吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-07
  • 2017-09-14
  • 1970-01-01
  • 2013-11-06
  • 2011-04-14
  • 2019-09-25
  • 2019-11-06
相关资源
最近更新 更多