use*_*270 6 python django django-class-based-views
我正在使用基本的博客应用程序练习django Class-Based-View.但是,出于某种原因,我的Post模型的CreateView没有将帖子保存在数据库中.
models.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')
Run Code Online (Sandbox Code Playgroud)
forms.py
class PostForm(forms.ModelForm):
class Meta:
model = Post
exclude = ('user', 'post_date')
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
它显示内容而不会产生任何错误,但是当我检查管理页面时,CreateView创建的帖子没有保存在数据库中..任何想法.. ??
谢谢
一个提示:exclude在定义表单时不要使用,使用fields,更安全以及推荐的方法.
重定向由get_success_url方法定义.如果您的模型中有get_absolute_url CreateView方法将重定向到该URL,否则您始终可以get_success_url在视图中覆盖.
使用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})
Run Code Online (Sandbox Code Playgroud)
使用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,))
Run Code Online (Sandbox Code Playgroud)
我想你会发现这个页面在使用CBV时非常有用:http: //ccbv.co.uk/projects/Django/1.5/django.views.generic.edit/CreateView/
| 归档时间: |
|
| 查看次数: |
8549 次 |
| 最近记录: |