为什么使用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?

查看:115
本文介绍了为什么使用form_class而不是CreateView时UpdateView需要定义model / queryset / get_queryset?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

像魅力一样工作:

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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆