2009-01-11 15 views
10

Jest to łatwe dla osób, które nie są w linii. Wystarczy zastąpić idąc w swoim admin.py AdminOptions:Jak dodać niestandardowy wbudowany widget administratora w Django?

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) 

nie mogę dowiedzieć się, jak dostosować się do tego, aby pracować inlines.

Odpowiedz

8

Działa dokładnie w ten sam sposób. Klasy TabularInline i StackedInline również mają metodę formfield_for_dbfield i nadpisujesz ją w ten sam sposób w swojej podklasie.

+0

Doh! Byłem zbyt komplikując rzeczy i bawiąc się z InlineFormsetFactory i tym podobne! –

1

Edytuj: Nieważne. To był po prostu głupi błąd z mojej strony.

Czy możesz podać mały fragment tego działającego w liniach? Kiedy próbuję kodu poniżej, po prostu dostaję jakiś dziwny keyerror.

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) 
6

Ponieważ Django 1.1, formfield_overrides pracuje również

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

Problem polega na tym, że wydaje się, że chcesz dodać nowe pole, gdy wartość domyślna = jest ustawiona na czymś w linii. –

Powiązane problemy