0

在我的 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

更新:我不能使用excludereadonlyattrs ofModelAdmin因为我需要用户能够在他创建对象时添加一些东西。但是当创建对象时,我不希望用户只是查看值而不是编辑它。

4

2 回答 2

0

AMoedlAdmin可以是解决方案:

class CustomAdmin(admin.ModelAdmin):
    readonly_fields = ('tipe_zayvki',)

还有一个名为get_readonly_fieldshere的方法示例:

class CustomAdmin(admin.ModelAdmin):
    def get_readonly_fields(self, request, obj=None):
        if obj:
            return ['tipe_zayvki']
        else:
            return []
于 2013-07-27T19:24:03.123 回答
0

尝试exclude按照Django 文档中的说明进行指定。这将删除表单中呈现的字段,这是比禁用的表单输入字段更干净的 UX。

所以对于你的例子:

class MyModelForm(ModelForm):
    class Meta:
        exclude = ('tipe_zayvki', )
于 2013-07-28T07:31:35.320 回答