如何将ModelChoiceField转换为admin中的仅显示字段

时间:2011-08-22 19:00:47

标签: django django-admin

现在,我有一个带有Container的管理页面和一个用于Pages的stackedInline。这些页面中包含2个ForeignKeys,并且随着这些ForeignKeys的值增长,该页面将永远呈现。

如何设法显示ForeignKey的值,但不要让它在管理员中变成一个多变的东西?我定义想在内联中显示str(ForeignModel),但我不希望为每个Page模型加载一个包含多个1000个选项的选择框。

我记得在某个地方读过这个,但似乎无法找到它。如果它不在管理员中,我可以更改窗口小部件,但我不知道如何在管理员中执行此操作。

1 个答案:

答案 0 :(得分:3)

你在谈论ModelAdmin.readonly_fields吗?

class MyModelAdmin(admin.ModelAdmin):
    # Other stuff
    readonly_fields = ('myforeignkey',)

而且,为了将来参考,可以轻松更改管理中的小部件。

对于特定字段:

class MyModelAdminForm(forms.ModelForm):
    class Meta:
        model = MyModel
        widgets = {
            'somefield': MyWidget(),
        }

class MyModelAdmin(admin.ModelAdmin):
    form = MyModelAdminForm

适用于特定类型的所有字段:

class MyModelAdmin(admin.ModelAdmin):
    formfield_overrides = {
        models.TextField: {'widget': RichTextEditorWidget},
    }