我有一个继承自UpdateView
和UserPassesTestMixin
的视图。两种类型的用户可以访问它-超级用户或普通用户。我确定它在test_func()
中是哪一个,并将结果存储在self.superuser
中。现在,我想根据用户级别修改显示的表单(即,如果当前用户不是超级用户,则禁用表单中的几乎所有字段,否则将其全部启用)。我应该重写哪种视图方法来修改视图的表单(在这种情况下,请禁用必要的字段)?还是这个想法错误,我应该采取不同的方法?
答案 0 :(得分:0)
您可以将识别用户所需的数据传递给表单,然后在表单中,您可以在__init__
中获取数据,然后可以在其中更改self.fields
以反映类型用户。
如果该示例是为超级用户实例化的,请检查以下示例,该示例将ReadOnly
删除到字段superuser_field
中。
class MyForm(forms.Form):
def __init__(self, is_superuser=False, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
if is_superuser:
self.fields['superuser_field'].disabled = False
如果我理解正确的话,可以在您的代码中
def yourview(...):
# ...
myform = MyForm(is_superuser=self.superuser)
# ....