2009-01-11 9 views
10

Dies ist für Nicht-Inlines einfach. außer Kraft setzen Sie einfach die folgende in den Ihren admin.py AdminOptions:Wie füge ich ein benutzerdefiniertes Inline-Admin-Widget in Django hinzu?

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) 

ich nicht herausfinden kann, wie diese Anpassung für inlines zu arbeiten.

Antwort

8

Es funktioniert genau so. Die Klassen TabularInline und StackedInline verfügen auch über eine Methode formfield_for_dbfield, die Sie in Ihrer Unterklasse auf die gleiche Weise überschreiben.

+0

Doh! Ich habe die Dinge überkompliziert und mit InlineFormsetFactory und ähnlichem herumgespielt! –

1

Bearbeiten: Nevermind. Das war nur ein dummer Fehler von meiner Seite.

Könnten Sie möglicherweise einen kleinen Ausschnitt davon in Inlines arbeiten? Wenn ich den Code unten versuche, bekomme ich nur einen seltsamen Schlüsselfehler.

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

Da Django 1.1 wird formfield_overrides arbeitet auch

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

Das Problem ist, dass es scheint, ein neues Feld hinzufügen zu wollen, wenn default = auf etwas am Inline gesetzt ist. –

Verwandte Themen