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