2014-05-19 186 views
0

修改空間小部件表單集我使用的是TabularInline重組的一些車型在Django 1.6管理員。當我嘗試覆蓋正在使用的默認窗體時,我遇到了困難。我已閱讀文檔here的相關部分。使用formfield_overrides我試圖用改變形式是:在Django管理

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確實存在一個空的字典,但我不知道什麼是正確的VALU es應該是。這是正確的方法嗎?當模型使用TabularInline進行分組時,是否有其他方式可以修改這些小部件?

回答

1

通常你應該formfield_overrides在TabularInline或StackableInline defenition財產使用。

例如:

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