2009-05-26 7 views
0

J'ai fait un inline nommé Fooinline. Cette ligne a été bien travaillé dans Django 1.02, mais dès que je suis passé à Django 1.1, il a commencé à donner une erreur:django en ligne numéro

**TypeError at /admin/casd/aaas/4028cb901dd9720a011deadd85e8007f/ 
__init__() got an unexpected keyword argument 'request'** 

Mon code Fooinline est:

class FooInline(InlineModelAdmin): 

template = 'admin/edit_inline/tabular2.html' 

def formfield_for_dbfield(self,db_field, **kwargs): 
# if isinstance(db_field, (models.ForeignKey, models.ManyToManyField)): 
#  BaseModelAdmin.formfield_for_dbfield(self, db_field, **kwargs) 
# else: 
    kwargs['widget'] = FlatTextWidget 
    return db_field.formfield(**kwargs) 

Et mon FlatTextWidget est

class FlatTextWidget(HiddenInput): 
def __init__(self, attrs=None): 
    if attrs is not None: 
     self.attrs = attrs.copy() 
     super(Widget, self).__init__(attrs) 
    else: 
     self.attrs = {} 
     super(Widget, self).__init__() 

def render(self, name, value, attrs=None): 
    real_field = super(HiddenInput, self).render(name, value, attrs) 
    x = value 
    if x is None: 
     x = '' 
    return mark_safe('%s%s' % (real_field, x)) 

def _has_changed(self, initial, data): 
    return False 

J'appelle mon Fooinline comme

class XYZInline(Fooinline): 
    model=XYZ 

Répondre

2

L'erreur est dans votre formfield_for_dbfield, il faut lire:

def formfield_for_dbfield(self, db_field, **kwargs): 
    kwargs['widget'] = FlatTextWidget 
    return super(FooInline, self).formfield_for_dbfield(db_field,**kwargs) 

Jetez un oeil à la fonction d'origine dans contrib/admin/options.py#L71

Questions connexes