Django Admin:仅对一个模型字段使用自定义小部件

新手上路,请多包涵

我的模型中有一个 DateTimeField 字段。我想在 Django 管理站点中将其显示为复选框小部件。为此,我创建了一个自定义表单小部件。但是,我不知道如何将我的自定义小部件 用于这一字段。

Django 文档 解释了如何为特定类型的 所有 字段使用自定义小部件:

 class StopAdmin(admin.ModelAdmin):
    formfield_overrides = {
        models.DateTimeField: {'widget': ApproveStopWidget }
    }

但这还不够细化。我只想为 一个 字段更改它。

原文由 Belmin Fernandez 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 565
2 个回答

为您的 ModelAdmin 创建自定义 ModelForm 并将“小部件”添加到其 Meta 类,如下所示:

 class StopAdminForm(forms.ModelForm):
  class Meta:
    model = Stop
    widgets = {
      'field_name': ApproveStopWidget(),
    }
    fields = '__all__'

class StopAdmin(admin.ModelAdmin):
  form = StopAdminForm

完毕!

这方面的文档有点不直观地放在 ModelForm 文档中,在管理文档中没有提及它。请参阅: 从模型创建表单

原文由 Chris Pratt 发布,翻译遵循 CC BY-SA 4.0 许可协议

在深入研究 admin模型字段表单字段 代码后,我相信实现我想要的唯一方法是创建自定义模型字段:

models.py

 from django.db import models
from widgets import ApproveStopWidget

class ApproveStopModelField(models.DateTimeField):
    pass

class Stop(models.model):
    # Other fields
    approve_ts = ApproveStopModelField('Approve place', null=True, blank=True)

admin.py

 from widgets import ApproveStopWidget
from models import ApproveStopModelField

class StopAdmin(admin.ModelAdmin):
    formfield_overrides = {
        ApproveStopModelField: {'widget': ApproveStopWidget }
    }

它完成了工作。

目前,我不会回答这个问题,因为我习惯于忽略明显的问题。也许一些 Django smartypants 有更好的解决方案。

原文由 Belmin Fernandez 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题