Это легко для не-встроенных. Просто переопределите следующее в вашем 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)
Я не могу понять, как адаптировать это для работы с инлайнами.






Это работает точно так же. Классы TabularInline и StackedInline также имеют метод formfield_for_dbfield, и вы таким же образом переопределяете его в своем подклассе.
Обновлено: Забыть. Это была просто глупая ошибка с моей стороны.
Не могли бы вы предоставить небольшой фрагмент этой работы во встроенных строках? Когда я пробую приведенный ниже код, я получаю странную ошибку ключа.
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_overrides также работает
formfield_overrides = {
models.ImageField: {'widget': AdminImageWidget},
}
Проблема в том, что кажется, что он хочет добавить новое поле, когда default = установлен для чего-то во встроенном.
Дох! Я слишком усложнял вещи и возился с InlineFormsetFactory и тому подобным!