尝试学习Django,也许我的主要概念是错误的。
创建表单:
class PostForm(ModelForm):
class Meta:
model = Post
exclude = ('pub_date', )
labels = {
'body_text': _('Post'),
}
使用以下格式调用视图:
class PostCreate(generic.CreateView):
template_name = 'post/post_form.html'
form_class = PostForm
问题是我需要手动输入EXCLUDED值。 Python docs say to do something like this:
form = PartialAuthorForm(request.POST)
author = form.save(commit=False)
author.title = 'Mr'
author.save()
我不知道在哪里输入此代码。我对View函数的理解是它们包含了制作页面的代码,因此不再被调用,但我可能错了。或者也许我不能在这种情况下使用通用视图?
解决这个问题就足够了,但对观点的概念性解释会更好。
答案 0 :(得分:2)
什么是POSTView
?这是你创造的东西,还是django中的新东西?
完成您要做的事情的一种方法是使用django FormView
(或CreateView
)并覆盖form_valid
方法。
class PostCreate(CreateView):
template_name = 'post/post_form.html'
form_class = PostForm
def form_valid(self, form):
author = form.save(commit=False)
author.title = 'Mr'
author.save()
# return HttpResponse
答案 1 :(得分:1)
如果您正在使用通用视图,则应查看https://docs.djangoproject.com/en/1.6/ref/class-based-views/generic-editing/#createview并查找从祖先(MRO)继承的方法。
在这里,您可以覆盖post方法,以便在保存模型实例之前为pub_date字段指定值。类似的东西:
class PostCreate(generic.CreateView):
template_name = 'post/post_form.html'
form_class = PostForm
def post(self, request, *args, **kwargs):
form = PostForm(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.pub_date = datetime.now()
post.save()
return self.form_valid(form)
return self.form_invalid(form)
您甚至可以直接使用form_valid方法覆盖。 无论哪种方式,提醒可以使用GET请求(涉及表单的表示,通常为创建视图为空)和POST(表单提交)来调用视图。
查看ModelForm的Django文档,以更好地理解绑定和未绑定的表单行为。
希望这有帮助!
答案 2 :(得分:0)
此示例使用的是函数视图,而不是基于类的函数视图。您可以在form_valid
方法的类视图中执行此操作,但是您需要删除第一行,因为表单已经传递给该方法。