【问题标题】:How do I add a custom inline admin widget in Django?如何在 Django 中添加自定义内联管理小部件?
【发布时间】:2009-01-11 17:25:11
【问题描述】:

这对于非内联来说很容易。只需在 admin.py AdminOptions 中覆盖以下内容:

def formfield_for_dbfield(self, db_field, **kwargs):
    if db_field.name == 'photo':
        kwargs['widget'] = AdminImageWidget()
        return db_field.formfield(**kwargs)
    return super(NewsOptions,self).formfield_for_dbfield(db_field,**kwargs)

我不知道如何使它适用于内联。

【问题讨论】:

    标签: python django django-admin


    【解决方案1】:

    工作示例:

    class PictureInline(admin.StackedInline):
        model = Picture_Gallery
        extra = 3
        def formfield_for_dbfield(self, db_field, **kwargs):
            if db_field.name == 'name':
                kwargs['widget'] = MyWidget()
            return super(PictureInline,self).formfield_for_dbfield(db_field,**kwargs)
    

    【讨论】:

      【解决方案2】:

      它的工作方式完全相同。 TabularInline 和 StackedInline 类也有一个 formfield_for_dbfield 方法,您可以在子类中以同样的方式覆盖它。

      【讨论】:

      • 噢!我把事情弄得太复杂了,并且摆弄了 InlineFormsetFactory 之类的东西!
      【解决方案3】:

      从 Django 1.1 开始,formfield_overrides 也在工作

      formfield_overrides = {
          models.ImageField: {'widget': AdminImageWidget},
      }
      

      【讨论】:

      • 问题是它似乎想在内联的某些东西上设置 default= 时添加一个新字段。
      猜你喜欢
      • 2011-12-29
      • 2013-01-22
      • 1970-01-01
      • 2012-09-15
      • 2016-05-15
      • 2010-11-23
      • 2017-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多