首页 > 解决方案 > 用户认证后修改表单的字段

问题描述

我有一个继承自UpdateViewand的观点UserPassesTestMixin。两种类型的用户可以访问它——超级用户或普通用户。我确定它在哪一个test_func()并将结果存储在self.superuser. 现在我想根据用户的级别修改显示的表单(即如果当前用户不是超级用户,则禁用表单中的几乎所有字段,否则将它们全部启用)。我应该重写哪个视图方法来修改视图的表单(在这种情况下禁用必要的字段)?或者这个想法是错误的,我应该以不同的方式处理这个问题?

标签: django

解决方案


您可以将识别用户所需的数据传递给表单,并在表单中获取数据,__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)
    # ....

推荐阅读