Ben*_*ey4 6 django django-class-based-views
奇迹般有效:
MyCreateView(CreateView):
template_name = "my_template_name"
form_class = MyModelForm
success_url = "/success/"
Run Code Online (Sandbox Code Playgroud)
但以下不是:
MyUpdateView(UpdateView):
template_name = "my_template_name"
form_class = MyModelForm
success_url = "/success/"
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
MyUpdateView is missing a queryset. Define MyUpdateView.model, MyUpdateView.queryset, or override MyUpdateView.get_queryset().
Run Code Online (Sandbox Code Playgroud)
为什么UpdateView需要model,queryset或者get_queryset定义为不会导致错误而CreateView不是?它不应该能够从ModelForm中使用的模型中自动导出它吗?
目前(django 1.5.1正式发布)UpdateView正在调用self.get_object()能够instance向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)
Run Code Online (Sandbox Code Playgroud)
并且self.get_object方法需要声明此属性之一:model,queryset或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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4925 次 |
| 最近记录: |