【发布时间】:2021-06-08 20:39:04
【问题描述】:
我不能在 Django 中发帖,因为当我导入图像时它对我不起作用。它告诉我没有选择文件,但我选择了一个。
这是我创建的post模型,models.py文件:
class Post(models.Model):
publisher = models.ForeignKey(User,on_delete=models.CASCADE)
caption = models.CharField(max_length=100)
date_created = models.DateTimeField(default=timezone.now())
image = models.ImageField(upload_to="post_images")
def __str__(self):
return self.caption
这是 Post 模型的 forms.py 文件:
from django import forms
from .models import Post
class CreatePostForm(forms.ModelForm):
class Meta:
model = Post
fields = ['caption','image']
这是 views.py 文件中的 Publish 函数,它实现了我的发布功能的逻辑:
@login_required
def Publish(request):
if request.method == "POST":
form = CreatePostForm(request.POST,request.FILES)
if form.is_valid():
form.publisher = request.user
form.save()
return redirect("home")
else:
form = CreatePostForm()
return render(request,"posts/publish.html",{
"form":form,
})
int urls.py 文件:
from django.urls import path
from . import views
urlpatterns = [
path('publish/',views.Publish,name="publish"),
path('',views.home,name="home"),
]
这里是html模板:
{% extends "users/base.html" %}
{% load crispy_forms_tags %}
{% block title %}create{% endblock title%}
{% block content %}
<div class="container-fluid">
<div class="row">
<div class="col-sm-6 col-md-5 authentification">
<div class="form-header">
<h1>
publish
</h1>
</div>
<div class="form-body">
<form method="POST">
<fieldset class="form-group" enctype="multipart/form-data">
{% csrf_token %}
{{ form|crispy }}
</fieldset>
<div class="form-group">
<button type="submit" class="btn btn-primary form-control">publish</button>
</div>
</form>
</div>
</div>
</div>
</div>
{% endblock content %}
使用的 Django 版本是 2.2 和 Python 3.8。和 Windows 10 专业版
【问题讨论】:
-
该东西没有保存在数据库中,当我尝试发布图像时,我选择它并写入,当我点击发布时它告诉我没有选择图像。
-
这是因为 HTML 表单中缺少
enctype。
标签: django web django-models django-forms