python-3.x - Django作者表单未保存到数据库
问题描述
模型.py
class Blog(models.Model):
title = models.CharField(max_length=100, unique=True)
slug = models.CharField(max_length=100, unique=True)
post_pic = models.ImageField(upload_to ='media/post_pics/', default =None )
body = models.TextField()
posted = models.DateTimeField(db_index=True, auto_now_add=True)
#author = must be logged in, populate from login details
表格.py
class postForm(forms.Form):
title = forms.CharField(max_length=100)
slug = forms.CharField(max_length=100)
post_pic = forms.ImageField()
body = forms.CharField(widget=SummernoteWidget())
视图.py
def write_detail(request):
template_name = 'blog/write.html'
if request.method == 'POST':
post_form = postForm(request.POST)
if post_form.is_valid():
new_post = Blog(title=title,slug=slug,post_pic=post_pic,body=body)
new_post.save()
return HttpResponseRedirect(blog.get_absolute_url())
else:
post_form = postForm()
return render(request, template_name, {'post_form': post_form})
写.html
{% extends 'blog/base.html' %}
{% load static %}
{% block back-img %}'{% static 'blog/assets/img/intro.jpg' %}'{% endblock back-img %}
{% block titdes %}Write{% endblock titdes %}
{% block title %}Write{% endblock title %}
{% block pagedes %}A django powered community blog{% endblock pagedes %}
{% block body%}
<form method = "POST">
{{ post_form.as_p }}
{% csrf_token %}
<button type="submit" class="btn btn-primary">Publish</button>
</form>
{% endblock %}
我已经设置了这个表单,以便作者可以在不访问管理面板的情况下将文章写入博客,我相信它应该可以工作,但它不会保存到数据库中。
我试图一遍又一遍地处理这些观点,但不知道还能做什么。请不要删除我的问题,只要问任何可以帮助你的问题。
解决方案
看起来您只需要保存表单,但您正在创建一个新Blog
对象,其中包含我们在任何地方都看不到定义的值。
new_post = Blog(title=title,slug=slug,post_pic=post_pic,body=body)
title
, slug
, 等没有得到定义。
您应该做的是将其更改为 aModelForm
以便 django 完成所有艰苦的工作;
class postForm(forms.ModelForm):
class Meta:
model = Blog
fields = ('title', 'slug', 'post_pic', 'body')
widgets = {
'body': SummernoteWidget(),
}
那么在您看来,您只需要这样做;
def write_detail(request):
template_name = 'blog/write.html'
if request.method == 'POST':
post_form = postForm(request.POST)
if post_form.is_valid():
post_form.save()
return HttpResponseRedirect(blog.get_absolute_url())
else:
# GET request
post_form = postForm()
return render(request, template_name, {'post_form': post_form})
表格(和模型表格)的summernote文档在这里
不要忘记,当使用媒体附带的这样的小部件时,您需要将表单的媒体添加到模板中。
您可以在 HTML 中使用{{ form.media }}
获取所有 CSS 和 JS 或单独{{ form.media.js }}
访问它{{ form.media.css }}
你可以在summernote应用游乐场看到他们是如何做到的
推荐阅读
- java - 如何在 Java 中合并两个对象的属性?(用户定义类的属性和 Map 的键值)
- c++ - 为 SIU 启用事件时出现 WFS_ERR_SIU_INVALID_PORT (-801) 错误
- php - 将数据插入数据库失败
- browser - 重新安装扩展程序后如何保留设备 ID 或任何 ID
- python-3.x - Pandas - 如果第二个字符串包含第一个字符串,则合并数据帧
- javascript - IOS浏览器中的javascript打印不打印对话框
- javascript - 网站缓存——浏览器缓存网站页面/js,避免用户看到网站更新
- java - 拆分后如何将值添加到同一字符串
- amazon-web-services - 在 S3 存储桶中拒绝具有特定标签值的 DeleteObject
- java - 如何在 AsyncTask 上使用 .getResources()?