使用动态form_class的Updateview

Sae*_*aeX 3 python django django-views

我想动态改变form_class一个的UpdateViewCBV在Django 1.6.

我试图使用get_context_data()来做这件事,但由于表单已经初始化,这没有用.所以它需要发生在__init__我猜中.这是我尝试过的__init__:

class UpdatePersonView(generic.UpdateView):

    model = Person
    form_class = ""

    def __init__(self, *args, **kwargs):
        super(UpdatePersonView, self).__init__(*args, **kwargs)
        person = Person.objects.get(id=self.get_object().id)
        if not person.somefield:
            self.form_class = OneFormClass
        elif person.somefield:
            self.form_class = SomeOtherFormClass
Run Code Online (Sandbox Code Playgroud)

'UpdatePersonView' object has no attribute 'kwargs'执行时我遇到了错误信息person = Person.objects.get(id=self.get_object().id).

手动指定id(例如id=9)时,设置有效.

如何在我覆盖的init方法中获取args/kwargs ?特别是我需要访问pk.

Dan*_*man 5

你应该简单地覆盖get_form_class.

(另外我不确定你为什么要查询person:那个对象self.get_object()已经是相同的了,所以没有必要再获取它的ID然后再查询.)

def get_form_class(self):
    if self.object.somefield:
        return OneFormClass
    else:
        return SomeOtherFormClass
Run Code Online (Sandbox Code Playgroud)