django - 帮助创建文章

时间:2011-08-21 01:10:10

标签: django view django-forms

我正在通过django教程来创建一个wiki,我对下面视图中发生的事情感到有点困惑。具体来说,这部分:

if form.is_valid():
    article = form.save(commit=False)
    article.author = request.user
    article.save()
    msg = "Article saved successfully"
    messages.success(request, msg, fail_silently=True)
    return redirect(article)

以下是我的问题:

  1. 撰写article = form.save(commit=False)时正在实例化的内容是什么,(commit=False)是什么意思?
  2. request.user来自哪里以及它做了什么?
  3. 我还可以使用article.save()
  4. 的解释
  5. messages.success来自哪里?
  6. 很抱歉所有的问题,但教程有点细节:(。

    以下是模型:

    class Article(models.Model):
        """Represents a wiki article"""
    
        title = models.CharField(max_length=100)
        slug = models.SlugField(max_length=50, unique=True)
        text = models.TextField(help_text="Formatted using ReST")
        author = models.ForeignKey(User)
        is_published = models.BooleanField(default=False, verbose_name="Publish?")
        created_on = models.DateTimeField(auto_now_add=True)
        objects = models.Manager()
        published = PublishedArticlesManager()
    
        def __unicode__(self):
            return self.title
    
        def save(self, *args, **kwargs):
            if not self.slug:
                self.slug = slugify(self.title)
            super(Article, self).save(*args, **kwargs)
    
        @models.permalink
        def get_absolute_url(self):
            return ('wiki_article_detail', (), { 'slug': self.slug })
    

    以下是完整视图:

    @login_required
    def add_article(request):
        form = ArticleForm(request.POST or None)
        if form.is_valid():
            article = form.save(commit=False)
            article.author = request.user
            article.save()
            msg = "Article saved successfully"
            messages.success(request, msg, fail_silently=True)
            return redirect(article)
        return render_to_response('wiki/article_form.html', 
                                  { 'form': form },
                                  context_instance=RequestContext(request))
    

1 个答案:

答案 0 :(得分:0)

  1. 当你写article =时正在实例化什么 form.save(commit=False),论证是什么,(commit=False) 意思? 保存模型在数据库中插入/更新数据并返回模型的范围(在本例中为文章实例)。模型将表单映射到模型。但是,有时您可能希望添加一些不直接来自表单的额外内容。因此,为防止两次更新,您不通过指定commit=False来提交数据库,而是在实例上执行.save()时对数据库进行更改。
  2. request.user来自哪里,它做了什么? request.user是指当前登录的用户(发出此请求的人)。
  3. 我还可以使用article.save()的解释 - 将文章字段插入/更新到数据库。
  4. messages.success来自哪里?消息框架仅用于使用cookie和会话传递错误/成功/信息性消息。