在我的ModelForm中,我需要禁用ForeignKey字段。我尝试了这件事,但选择仍然是启用的,正如我在html代码中看到的,属性并没有添加到小部件中。这是我的代码ModelForm代码:
class ZayvkiAdminForm(ModelForm):
class Meta:
model = Zayvki
def __init__(self, *args, **kwargs):
if not kwargs.get('instance', None):
if not kwargs.get('initial', None):
kwargs['initial'] = {}
if not kwargs['initial'].get('nomer_zayvki', None):
kwargs['initial']['nomer_zayvki'] = get_request_number()
super(ZayvkiAdminForm, self).__init__(*args, **kwargs)
instance = getattr(self, 'instance', None)
if instance and instance.id:
self.fields['tipe_zayvki'].required = False
self.fields['tipe_zayvki'].widget.attrs['disabled'] = 'disabled'
self.fields['nomer_zayvki'].widget.attrs['readonly'] = True
更新:我不能使用ModelAdmin
的exclude
或readonly
属性,因为我需要用户在创建对象时能够添加一些内容。但是当创建对象时,我不希望用户只看到值而不编辑它。
MoedlAdmin
可以是解决方案:
class CustomAdmin(admin.ModelAdmin):
readonly_fields = ('tipe_zayvki',)
这里还有一个名为get_readonly_fields
的方法,例如:
class CustomAdmin(admin.ModelAdmin):
def get_readonly_fields(self, request, obj=None):
if obj:
return ['tipe_zayvki']
else:
return []
尝试指定Django文档中提到的exclude
。这将删除表单中呈现的字段,这比禁用的表单输入字段更干净。
举个例子:
class MyModelForm(ModelForm):
class Meta:
exclude = ('tipe_zayvki', )