代码之家  ›  专栏  ›  技术社区  ›  Dariush

用户身份验证后修改表单字段

  •  0
  • Dariush  · 技术社区  · 7 年前

    UpdateView UserPassesTestMixin . 有两种类型的用户可以访问它—超级用户或普通用户。我决定它在哪一个里面 test_func() self.superuser . 现在,我想根据用户的级别修改显示的表单(即,如果当前用户不是超级用户,则禁用表单中的几乎所有字段,否则将它们全部保留为启用状态)。我应该重写哪个视图方法来修改视图的窗体(在这种情况下禁用必需的字段)?或者这个想法是错误的,我应该以不同的方式来处理这个问题?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Karim N Gorjux    7 年前

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