为什么使用form_class而不是CreateView时UpdateView需要定义model / queryset / get_queryset? [英] Why does UpdateView need to have model/queryset/get_queryset defined when using form_class as opposed to CreateView?
问题描述
像魅力一样工作:
MyCreateView(CreateView):
template_name = "my_template_name"
form_class = MyModelForm
success_url = "/success/"
但以下内容不是:
MyUpdateView(UpdateView):
template_name = "my_template_name"
form_class = MyModelForm
success_url = "/success/"
我收到此错误:
MyUpdateView is missing a queryset. Define MyUpdateView.model, MyUpdateView.queryset, or override MyUpdateView.get_queryset().
为什么 UpdateView
需要<$ c定义$ c> model , queryset
或 get_queryset
不会在 CreateView
不是吗?
Why does an UpdateView
need model
, queryset
or get_queryset
defined to not cause an error while CreateView
doesn't? Shouldn't it be able to automatically derive it from the Model used in the ModelForm?
推荐答案
当前(django 1.5.1正式版)是否应该能够自动从ModelForm中使用的模型派生它?版本) UpdateView
调用 self.get_object()
能够提供实例
对象为表单。
Currently (django 1.5.1 official release) UpdateView
is calling self.get_object()
to be able to provide instance
object to Form.
来自https://github.com/django/django/blob/1.5c2/django/views/generic/edit.py#L217 :
def get(self, request, *args, **kwargs):
self.object = self.get_object()
return super(BaseUpdateView, self).get(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
self.object = self.get_object()
return super(BaseUpdateView, self).post(request, *args, **kwargs)
和 self.get_object
方法需要声明以下属性之一: model
, queryset
o r get_queryset
And self.get_object
method needs one of this properties declared: model
, queryset
or get_queryset
而 CreateView
不要调用 self.get_object()
。
来自https://github.com/django/django/blob/1.5c2/django/views/generic/edit.py#L194:
def get(self, request, *args, **kwargs):
self.object = None
return super(BaseCreateView, self).get(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
self.object = None
return super(BaseCreateView, self).post(request, *args, **kwargs)
这篇关于为什么使用form_class而不是CreateView时UpdateView需要定义model / queryset / get_queryset?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!