我想动态地更改Django 1.6中的form_class
CBV。
我尝试过使用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
我在执行'UpdatePersonView' object has no attribute 'kwargs'
时遇到了一个person = Person.objects.get(id=self.get_object().id)
错误消息。
当手动指定id (例如id=9
)时,设置就可以工作了。
如何在我正在重写的init方法中获取args/kwargs?特别是我需要访问pk
。
发布于 2014-04-09 15:18:00
您应该简单地重写get_form_class
。
(我也不知道为什么要查询person
:那个对象和self.get_object()
一样,所以没有必要获得ID,然后再次查询。)
def get_form_class(self):
if self.object.somefield:
return OneFormClass
else:
return SomeOtherFormClass
https://stackoverflow.com/questions/22965341
复制相似问题