Reputation: 21567
This is easy for non-inlines. Just override the following in the your 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)
I can't work out how to adapt this to work for inlines.
Upvotes: 13
Views: 10932
Reputation:
Working example:
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)
Upvotes: 3
Reputation: 43096
Since Django 1.1, formfield_overrides is also working
formfield_overrides = {
models.ImageField: {'widget': AdminImageWidget},
}
Upvotes: 8
Reputation: 126541
It works exactly the same way. The TabularInline and StackedInline classes also have a formfield_for_dbfield method, and you override it the same way in your subclass.
Upvotes: 13