如何在Django中添加自定义内联管理小部件?

2024-05-13 22:49:01 发布

您现在位置:Python中文网/ 问答频道 /正文

这对于非内联很容易。只需在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)

我不知道如何使它适应内联线。


Tags: namepyselffieldfordbreturnif
3条回答

编辑:无所谓。这只是我一个愚蠢的错误。

你能提供一个在内联中工作的小片段吗?当我尝试下面的代码时,我只是得到一些奇怪的键错误。

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)

自从Django 1.1以来,formfield_覆盖也在工作

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

它的工作原理完全相同。TabularInline和StackedInline类还有一个formfield_for_dbfield方法,您可以在子类中以同样的方式重写它。

相关问题 更多 >