gpt4 book ai didi

python - Django CreateView 没有保存对象

转载 作者:太空狗 更新时间:2023-10-29 22:31:01 24 4
gpt4 key购买 nike

我正在使用一个基本的博客应用程序练习 django Class-Based-View。但是,出于某种原因,我的 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')

表单.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 创建的帖子未保存在数据库中。任何想法..??

谢谢

最佳答案

一个提示:在定义表单时不要使用exclude,使用fields,更安全,也是推荐的方法。

重定向由 get_success_url 方法定义。如果您的模型中有方法 get_absolute_url CreateView 将重定向到该 URL,否则您始终可以在 View 中覆盖 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})

使用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/

关于python - Django CreateView 没有保存对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17826778/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com