简体   繁体   English

Django的CreateView没有保存对象

[英]Django's CreateView is not saving an object

I'm practicing Django's generic views, particularly ModelForms 我正在练习Django的通用视图,尤其是ModelForms

These are my views and models 这些是我的观点和模型

models.py 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')

    def get_absolute_url(self):
        return reverse('user-detail', kwargs={'pk': self.pk})

    def __unicode__(self):
        return self.post_title

forms.py 表格

class PostForm(forms.ModelForm):
    post_title = forms.CharField(
        label=u'Title',
        widget=forms.TextInput(attrs={'size':64})
    )
    post_content = forms.CharField(
        label=u'Content',
        widget=forms.TextInput(attrs={'size':128})
    )
    class Meta:
        model = Post

views.py views.py

class PostCreate(CreateView):
    fields = ['post_title', 'post_content']
    template_name = 'app_blog/post_save_form.html'
    model = Post
    form_class = PostForm   

    @method_decorator(login_required)
    def dispatch(self, *args, **kwargs):
        return super(PostCreate, self).dispatch(*args, **kwargs)

    def form_valid(self, form):
        self.object = form.save(commit=False)
        self.object.user = self.request.user
        self.object.post_date = datetime.now()
        return super(PostCreate, self).form_valid(form)

The view seems to work fine, not displaying any errors. 该视图似乎工作正常,没有显示任何错误。 However, when I check the Django admin page after submitting a form and saving a post, the post is not saved into the database for some reason. 但是,当我在提交表单并保存帖子后检查Django管理页面时,出于某种原因该帖子未保存到数据库中。

Any idea why this is happening? 知道为什么会这样吗?

As I can see from your code you use 从您的代码中可以看到

self.object = form.save(commit=False)

which mean that object will not be saved to database, but you can use it for futher processing. 这意味着该对象将不会保存到数据库,但是您可以将其用于进一步处理。 So you should use something like this: 所以你应该使用这样的东西:

self.object = form.save(commit=False)  # Not hit database
self.object.user = self.request.user  # Update user
self.object.post_date = datetime.now()  # Update post_date
self.object.save()  # And finally save your object to database.

Try this. 尝试这个。

def form_valid(self, form):
    form.instance.user = self.request.user
    form.instance.post_date = datetime.now()
    return super(PostCreate, self).form_valid(form)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM