我正在使用基本的博客应用程序练习 django 基于类的视图。
然而,由于某种原因,我的 Post 模型的 CreateView 没有将帖子保存在数据库中。
模型.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')
forms.py
class PostForm(forms.ModelForm):
class Meta:
model = Post
exclude = ('user', 'post_date')
views.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 创建的帖子未保存在数据库中。
任何想法..??
Thanks
提示一:不要使用exclude
定义表单时,使用fields
,更安全,也是推荐的方法。
重定向定义为get_success_url
方法。如果您的模型中有该方法get_absolute_url
创建视图将重定向到该 URL,否则您可以随时覆盖get_success_url
在你看来。
Using get_absolute_url
:
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')
@permalink
def get_absolute_url(self):
return ('myurlname', (), {'myparam': something_useful})
Using get_success_url
:
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()
form.save()
return super(PostCreate, self).form_valid(form)
def get_success_url(self):
return reverse('myurlname', args=(somethinguseful,))
我认为您在使用 CBV 时会发现此页面非常有用:http://ccbv.co.uk/projects/Django/1.5/django.views.generic.edit/CreateView/ http://ccbv.co.uk/projects/Django/1.5/django.views.generic.edit/CreateView/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)