我正在使用TabularInline
重新组织Django
1.6管理员中的某些模型。当我尝试覆盖正在使用的默认表单时,我遇到了困难。我已阅读了文档here的相关部分。使用formfield_overrides
我尝试使用以下方式更改表单:
formfield_overrides = {
models.PointField: {'widget': Textarea},
}
我使用以下方法继承admin.ModelAdmin
:
class DirectAdmin(admin.ModelAdmin):
def get_inline_instances(self, request, obj=None):
overrides = {
models.PointField: {'widget': Textarea},
}
for inline in self.inlines:
inline.formfield_overrides = overrides
return inline(self.model, self.admin_site)
然而,当我尝试这种方法时,我收到以下错误:
TypeError: zip argument #2 must support iteration
当我进入这个循环时,我可以看到inline.formfield_overrides
确实存在为空字典,但我不知道正确的值应该是什么。这是正确的方法吗?当使用TabularInline
对模型进行分组时,还有其他方法可以修改这些小部件吗?
答案 0 :(得分:1)
通常你应该在TabularInline或StackableInline defenition中使用formfield_overrides属性。
例如:
from django.contrib import admin
from myapp.models import City, Shop
class ShopInline(admin.TabularInline):
formfield_overrides = {
models.PointField: {'widget': Textarea},
}
model = Shop
class CityAdmin(admin.ModelAdmin):
inlines = [ShopInline,]
但是如果你想为所有内联设置小部件:
class DirectAdmin(admin.ModelAdmin):
def get_inline_instances(self, request, obj=None):
overrides = {
models.PointField: {'widget': Textarea},
}
inline_instances = super(DirectAdmin, self).get_inline_instances(request, obj=obj)
for inline in inline_instances:
inline.formfield_overrides = overrides
return inline_instances
为了更好地理解,请检查get_inline_instance definition