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.
你应该简单地覆盖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)