![](/img/trans.png)
[英]Django ModelAdmin get_form 'NoneType' object is not callable
[英]Django ModelAdmin get_form() doesn't set fields attribute
我在ModelAdmin
類中覆蓋了ModelAdmin
get_form()
:
def get_form(self, request, obj=None, **kwargs):
form = super(ModelAdmin, self).get_form(request, obj, **kwargs)
現在,如果我添加這一行:
print form.fields
我得到一個:
AttributeError: type object 'FilerImageForm' has no attribute 'fields'
為什么會這樣? 調用super get_form()
是否應該在表單上設置fields
屬性? 如果我弄錯了,我如何訪問ModelAdmin
類中表單上的ModelAdmin
?
get_form
返回class而不是instance, fields
屬性是instance屬性。 因此,您必須在訪問字段之前實例化表單。
來自django / contrib / admin / options.py的定義:
def get_form(self, request, obj=None, **kwargs):
"""
Returns a Form class for use in the admin add view. This is used by
add_view and change_view.
"""
更新:
我需要攔截表單字段創建,而不是視圖。 我需要更改字段的值,而不是弄亂模板的上下文。 我認為add_view()不適合這個。
我認為你可以通過覆蓋formfield_for_dbfield
方法來實現:
def formfield_for_dbfield(self, db_field, **kwargs):
"""
Hook for specifying the form Field instance for a given database Field
instance.
If kwargs are given, they're passed to the form Field's constructor.
"""
formfield = super(MyModelAdmin, self).formfield_for_dbfield(db_field, **kwargs)
if db_field.name == "field_you_are_looking_for":
# change formfield somehow here
# (or above, by passing modified kwargs in 'super' call)
return formfield
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.