Django管理如何显示在只读字段部件(django admin how to display wi

2019-08-16 22:05发布

我想在Django管理,以显示我的场上窗口小部件时该字段为readonly。

admin.py

class AudioTrackAdminInline(admin.StackedInline):
    model = AudioTrack
    form = AudioTrackForm
    readonly_fields = ('file',)

forms.py

class AudioTrackForm(forms.ModelForm):
    class Meta:
        model = AudioTrack
        widgets = { 'file': MediaFileInput, } # my widget

当文件是不是只读,它显示部件确定。 但是,当我把它作为只读的,我看到的文本行。 (Django不使用我的形式,如果只读)

我怎样才能得到它,即使在只读领域使用的形式?

要么

如何显示其他窗口,如果我只读设置我的领域?

Answer 1:

我会说这是一个特点。

当字段设置为只读,Django使用display_for_field函数的硬编码的结果,你不能自定义它。

另一种方法是不以只读方式设置字段并覆盖formfield_for_dbfield ,一个未公开ModelAdmin方法和采取相应的行动,以您的需求。



Answer 2:

另一种更灵活的解决方案是设置要以只读模式来再现这些领域的“禁用”属性,覆盖get_form(...)你的管理类的方法:

def get_form(self, *args, **kwargs):

    form = super(SupplierAdmin, self).get_form(*args, **kwargs)

    for field_name in self.fake_readonly_fields:
        form.base_fields[field_name].disabled = True

    return form

请注意,我把只读字段不是从通常的名字self.readonly_fields但是从不同阵列,我叫self.fake_readonly_fields ,为了避免名称重叠

(使用建议的解决方案的限制formfield_for_dbfield )就是以这种方式使你在同样的方式给定类型的所有数据库字段,阉应该还是不只读的。 这样一来工作,如果你的整个形式应该是只读的,但如果你是半只读一半没有交易的形式,最好是依靠disabled属性。

:在我的答案在这里的更多细节的Django的ModelAdmin,readonly_fields和布尔字段



文章来源: django admin how to display widget on readonly field