使 django modelchoicefield readonly true

Pet*_*bwa 6 django jquery

在我的编辑页面上,我试图允许用户编辑/更改他们输入的内容,但条件之一是他们无法编辑模型选择字段。

所以,我尝试了这个命令,但它不起作用。使用“readonly = True”用户仍然可以更改模型选择字段“下拉文件”,而使用“disabled = True”用户无法更改模型选择字段,但当他们尝试提交时会收到此错误:“此字段是必需的。”

myform.py

class NameForm(forms.ModelForm):
    class Meta:
         model=Name
         fields = '__all__'

    def __init__(self, *args, **kwargs):
         super(NameForm, self).__init__(*args, **kwargs)
         self.fields['names'].widget.attrs['disabled'] = 'True'
         #self.fields['names'].widget.attrs['readonly'] = True
Run Code Online (Sandbox Code Playgroud)

有人有解决方案吗..?

提前致谢

Ran*_*don 2

我在我们的项目中也遇到了类似的情况并修复了它。因此,您可以尝试这样解决您的问题:

class NameForm(forms.ModelForm):
    class Meta:
         model = Name
         fields = '__all__'

    def __init__(self, *args, **kwargs):
         super(NameForm, self).__init__(*args, **kwargs)       
         instance = getattr(self, 'instance', None)

         # When in EDIT mode.
         if instance and instance.id:
             self.fields['names'].widget.attrs['disabled'] = 'True'
             self.fields['names'].required = 'False'

    def clean_names(self):
        instance = getattr(self, 'instance', None)

        # `disabled` field will have no form data,
        # so we just use the previously saved value.
        if instance and instance.pk:
            return instance.names
        else:
            # When in CREATE mode.
            return self.cleaned_data['names']
Run Code Online (Sandbox Code Playgroud)