Как добавить собственный встроенный административный виджет в Django? - PullRequest
10 голосов
/ 11 января 2009

Это легко для не-строк. Просто переопределите следующее в ваших admin.py admin.py:

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)

Я не могу понять, как адаптировать это для работы с inline.

Ответы [ 3 ]

8 голосов
/ 12 января 2009

Работает точно так же. Классы TabularInline и StackedInline также имеют метод formfield_for_dbfield, и вы переопределяете его таким же образом в своем подклассе.

7 голосов
/ 26 мая 2010

Начиная с Django 1.1, formfield_overrides также работает

formfield_overrides = {
    models.ImageField: {'widget': AdminImageWidget},
}
1 голос
/ 01 мая 2009

Редактировать: Бессмысленно. Это была просто глупая ошибка с моей стороны.

Не могли бы вы предоставить небольшой фрагмент этой работы в строках? Когда я пытаюсь выполнить приведенный ниже код, я просто получаю странную ошибку.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...