簡體   English   中英

Django ModelAdmin get_form()不設置fields屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM