我正在使用一个基本的blog应用程序练习基于django类的视图。 但是,出于某种原因,我的Post模型的CreateView没有将Post保存在数据库中。
型号.py
class Post(models.Model):
user = models.ForeignKey(User)
post_title = models.CharField(max_length=200)
post_content = models.CharField(max_length=500)
post_date = models.DateTimeField('date posted')
表单.py
class PostForm(forms.ModelForm):
class Meta:
model = Post
exclude = ('user', 'post_date')
视图.py
class PostCreate(CreateView):
template_name = 'app_blog/post_save_form.html'
model = Post
form_class = PostForm
def form_valid(self, form):
form.instance.user = self.request.user
form.instance.post_date = datetime.now()
return super(PostCreate, self).form_valid(form)
它显示内容而不产生任何错误,但是当我检查管理页面时, CreateView创建的post未保存在数据库中。。 你知道吗。。??
谢谢
一个提示:在定义表单时不要使用
exclude
,使用fields
更安全,也是推荐的方法。重定向由
get_success_url
方法定义。如果您的模型中有方法get_absolute_url
CreateView将重定向到该URL,否则您可以始终覆盖视图中的get_success_url
。使用
get_absolute_url
:使用
get_success_url
:我认为在使用CBV时,您会发现此页非常有用: http://ccbv.co.uk/projects/Django/1.5/django.views.generic.edit/CreateView/
问题是,您正在排除强制字段,因此它不会通过表单验证。
您应该传递这个用一些默认值隐藏的字段,让use填充它们,将它们设置为null=True,或者在访问form_valid之前填充它们
我认为这是一个不调用
form.save()
的简单例子。当表单被验证时,所有的检查都完成了,但它实际上并没有将对象保存在数据库中。为此,您需要通过save()
方法明确告诉它。所以你想:
相关问题 更多 >
编程相关推荐