我想在编辑对象时禁用某些字段。我已经设法为文本字段执行此操作,但是对于下拉列表(选项列表)来说这是不可能的。
我正在表单的构造函数中执行此操作。
class OrderModelForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(forms.ModelForm, self).__init__(*args, **kwargs)
instance = getattr(self, 'instance', None)
if instance and instance.pk:
self.fields['description'].widget.attrs['readonly'] = True
self.fields['city_code'].widget.attrs['disabled'] = True
请注意我是如何使用不同的关键字制作的,但我无法为customer_id
字段执行此操作。
答案 0 :(得分:2)
将属性设置为disabled
或readonly
只会影响窗口小部件的显示方式。它并没有真正阻止某人提交更改这些字段的帖子请求。
为您的模型覆盖get_readonly_fields
可能是更好的方法。
class OrderModelAdmin(admin.Model
def get_readonly_fields(self, request, obj=None):
if self.obj.pk:
return ['description', 'city_code', 'customer']
else:
return []
答案 1 :(得分:1)
@Alasdair的答案比这个更好(因为这个没有阻止提交)。但我发布它,以防万一有人想要等同于' readonly' ModelChoiceField
。
self.fields['customer_id'].widget.widget.attrs['disabled'] = 'disabled'
请注意,ChoiceField
的内容应该是这样的:
self.fields['city_code'].widget.attrs['disabled'] = True