Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
以Django格式将外键下拉列表显示为文本_Django_Django Forms - Fatal编程技术网

以Django格式将外键下拉列表显示为文本

以Django格式将外键下拉列表显示为文本,django,django-forms,Django,Django Forms,有没有办法将Django表单中的外键字段显示为只读文本框 forms.py class NewModelForm(forms.ModelForm): class Meta: model = Model fields = ['fk_field', 'other_field'] def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs)

有没有办法将Django表单中的外键字段显示为只读文本框

forms.py
class NewModelForm(forms.ModelForm):

    class Meta:
        model = Model
        fields = ['fk_field', 'other_field']

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['fk_field'].widget.attrs['readonly'] = True #the dropdown is still active when this is set
        #self.fields['fk_field'] = forms.CharField(widget=forms.TextInput()) ##when I turn this on, I get an error that I am assigning to the wrong instance.

您可以覆盖任何
ModelForm
字段,甚至是来自模型的字段,只需将其设置为class属性,就像您对普通
表单
字段所做的那样:

class NewModelForm(ModelForm):
    fk_field = forms.CharField(required=False, disabled=True)

    class Meta:
        model = MyModel
        fields = ['fk_field', 'other_field']
字段上的选项将输入设置为禁用


请注意,您不应相信提交的数据包含
fk_字段
的正确初始值。如果任何人知道如何使用
curl
或Postman,即使
已禁用,也可以提交不同的
fk_字段。因此,如果忽略提交的任何值,并将其设置为视图中的正确值。

您可以将该字段声明为class属性(而不是在
\uuu init\uu()方法中)以覆盖它:
fk\u field=forms.CharField(必需=False,禁用=True)
谢谢!这与更新我的视图有关。因为我使用的是表单集,所以我必须循环使用我的实例。这篇文章对任何有同样问题的人都有帮助: