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

发布于 2024-12-01 00:06:55 字数 246 浏览 3 评论 0原文

现在,我有一个带有容器和页面 stackedInline 的管理页面。这些页面中有 2 个外键,随着这些外键值的数量增加,页面需要永远呈现。

我如何设法显示外键的值,但不让它在管理中成为可更改的东西?我确实想在内联中显示 str(ForeignModel),但我不希望为每个页面模型加载一次包含 1000 个选项的选择框。

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

Right now, I have an admin page with a Container and a stackedInline for the Pages. The pages have 2 ForeignKeys in them and as the # of values for those ForeignKeys grows, the page takes forever to render.

How do I manage to display the value of the ForeignKey, but NOT let it be a changeable thing in the admin? I definetely want to display the str(ForeignModel) in the inlines, but I don't want a select box with several 1000 choices to be loaded once for each Page model.

I remember reading about this somewhere, but can't seem to locate it anymore. If it wasn't in the admin, I could just change out the widget, but I don't know how to do that in the admin.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

莫言歌 2024-12-08 00:06:55

您是在谈论 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},
    }

Are you talking about ModelAdmin.readonly_fields?

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

And, for future reference, it's easy to change out the widget in the admin.

For a specific field:

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

class MyModelAdmin(admin.ModelAdmin):
    form = MyModelAdminForm

For all fields of a particular type:

class MyModelAdmin(admin.ModelAdmin):
    formfield_overrides = {
        models.TextField: {'widget': RichTextEditorWidget},
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文