我有一个单独的视图,可以使用或不使用 label_rif 属性调用,基于此我可以切换form_class和模板吗?
class LabelCreateView(CreateView):
model = models.Label
if self.kwargs['label_rif'] > 0:
form_class = LabelForm
template_name = 'AUTO_form.html'
else:
form_class = LabelManForm
template_name = 'MAN_form.html'
我试图在方法
中插入form_class但没有成功def get_form_kwargs(self):
kwargs = super(LabelCreateView, self).get_form_kwargs()
if self.kwargs['label_rif']:
form_class = LabelForm
或者我应该定义另一个单独的视图? 我想保持干燥,有可能吗?
答案 0 :(得分:1)
您可以通过覆盖get_form_class
和get_template_names
在一个视图中执行此操作:
class LabelCreateView(CreateView):
model = models.Label
def get_form_class(self):
if self.kwargs['label_rif'] > 0:
return LabelForm
else:
return LabelManForm
def get_template_names(self):
# Note this returns a list, not a string
if self.kwargs['label_rif'] > 0:
return ['AUTO_form.html']
else:
return ['MAN_form.html']
根据你的url配置,我认为在这种情况下两个视图可能更具可读性。您只需要覆盖不同的属性,因此它仍然是DRY。
class LabelCreateView(CreateView):
model = models.Label
form_class = LabelForm
template_name = 'AUTO_form.html'
class ManLabelCreateView(LabelCreateView):
form_class = LabelManForm
template_name = 'MAN_form.html'