【问题标题】:Django Dynamic Form Field - how to change?Django 动态表单字段 - 如何更改?
【发布时间】:2020-06-26 02:27:02
【问题描述】:

在我下面的 Django 表单中

class Form_Vechicle(forms.ModelForm):
    flatno_id = forms.ModelChoiceField(widget=forms.Select(
        attrs={'class': 'form-control form-control-sm'}),
        required=True, help_text="Select flat No from the list", empty_label="Select flat no",
        queryset=FlatNo.objects.filter(is_deleted=False).order_by("flatindex"),
        label="Flat No")

    reg_no = forms.CharField(
        widget=forms.TextInput(attrs={'class': 'form-control form-control-sm'}),
        required=True, min_length=2, max_length=15, help_text="Regtration No", label="Veh No")

    detail = forms.CharField(widget=forms.TextInput(
        attrs={'class': 'form-control form-control-sm'}),
        required=True, max_length=25, help_text="make/modal",
        label="Brand")


    class Meta:
        model = Vehicle
        fields = ['flatno_id', 'reg_no', 'detail' ]

如何根据用户登录类型动态更改表单字段小部件

如果用户是超级用户,则此表单没有变化。

对于所有其他用户(非超级用户),我想隐藏 flatno_id 字段

flatno_id = widgets.HiddenInput()

对此的任何帮助将不胜感激。提前非常感谢。

【问题讨论】:

    标签: django django-forms


    【解决方案1】:

    你可以试试这个方法来隐藏或显示模型表单中的a字段

    class Form_Vechicle(forms.ModelForm):
        flatno_id = forms.ModelChoiceField(widget=forms.Select(
            attrs={'class': 'form-control form-control-sm'}),
            required=True, help_text="Select flat No from the list", empty_label="Select flat no",
            queryset=FlatNo.objects.filter(is_deleted=False).order_by("flatindex"),
            label="Flat No")
    
        reg_no = forms.CharField(
            widget=forms.TextInput(attrs={'class': 'form-control form-control-sm'}),
            required=True, min_length=2, max_length=15, help_text="Regtration No", label="Veh No")
    
        detail = forms.CharField(widget=forms.TextInput(
            attrs={'class': 'form-control form-control-sm'}),
            required=True, max_length=25, help_text="make/modal",
            label="Brand")
    
    
        class Meta:
            model = Vehicle
            fields = ['flatno_id', 'reg_no', 'detail' ]
        def __init__(*args, **kwargs):
            super().__init__(*args, **kwargs)
            if !(request.user.is_superuser):
                self.fields['flatno_id'].widget = forms.HiddenInput()
    

    【讨论】:

      【解决方案2】:

      你可以重载 init 表单

      def __init__(*args, **kwargs):
          super().__init__(*args, **kwargs)
          if IF_CASE:
              self.fields['flatno_id'].widget = forms.HiddenInput()
      

      【讨论】:

        猜你喜欢
        • 2017-06-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-28
        • 1970-01-01
        • 1970-01-01
        • 2015-09-09
        • 2011-02-07
        相关资源
        最近更新 更多