【问题标题】:django inline issuedjango 内联问题
【发布时间】:2009-05-26 06:39:48
【问题描述】:

我创建了一个名为 Fooinline 的内联。这个内联在 Django 1.02 中运行良好,但是一旦我升级到 Django 1.1,它就开始报错:

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

我的Fooinline 代码是:

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)

而我的FlatTextWidget

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

我将我的Fooinline 称为

 class XYZInline(Fooinline):
    model=XYZ

【问题讨论】:

    标签: django django-models django-admin django-forms


    【解决方案1】:

    错误在你的formfield_for_dbfield,它应该是:

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

    看看contrib/admin/options.py#L71中的原函数

    【讨论】:

      猜你喜欢
      • 2011-06-17
      • 2011-04-01
      • 2011-06-25
      • 2013-12-22
      • 2011-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多