在 Django 中通过 ModelForm 上传图片

Upload image via ModelForm in django

当我尝试提交表单时,它显示 "This field is required." 对于图像,即使我向它提供了图像和其他详细信息。

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 中给出了时间。

您必须像这样修改模板添加 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.

访问上传的文件