以Django格式将外键下拉列表显示为文本
有没有办法将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)
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)
谢谢!这与更新我的视图有关。因为我使用的是表单集,所以我必须循环使用我的实例。这篇文章对任何有同样问题的人都有帮助: