2013-03-11 55 views
0

當添加一個額外的表單域的readonly_fields一個ModelAdmin打開管理頁面時,我的模型的實例中,我得到一個ImproperlyConfigured錯誤:如何將modeladmin額外的表單域添加到readonly_fields?

TaskClosedAdmin.readonly_fields[0], 'extra_admin_field' is not a callable or an attribute of 'TaskClosedAdmin' or found in the model 'TaskClosed'. 

我如何添加額外的領域readonly_fields?

編輯

我也試過在TaskClosedAdminget_form(),以爲字段可能super(TaskClosedAdmin, self).get_form(request, obj, **kwargs)後更新:

def get_form(self, request, obj=None, **kwargs): 
    form = super(TaskClosedAdmin, self).get_form(request, obj, **kwargs) 
    self.readonly_fields = obj._meta.get_all_field_names() 
    self.readonly_fields.append('extra_admin_field') 
    return form 

,我仍然得到關於extra_admin_field不存在同樣的錯誤..我可以在哪裏添加它?

models.py

class Task(models.Model): 

    # some fields 


class TaskToConfirm(Task): 
    class Meta: 
     proxy = True 

admin.py

class TaskForm(forms.ModelForm): 

    extra_admin_field = forms.CharField(max_length=10) 

    class Meta: 
     model = Task 


    def __init__(self, *args, **kwargs): 

     super(TaskForm, self).__init__(*args, **kwargs) 

     # set extra_admin_field value 


class TaskAdmin(admin.ModelAdmin): 

    form = TaskForm 


class TaskClosedAdmin(TaskAdmin): 

    readonly_fields = ('extra_admin_field',) 

回答

1

你需要做的是寫一個只讀的小部件和直接指定它的形式,這樣的:

from ... import ReadOnlyWidget 

class TaskForm(forms.ModelForm): 
    extra_admin_field = forms.CharField(max_length=10) 

    class Meta: 
     model = Task 
     widgets = { 
      'extra_admin_field': ReadOnlyWidget, 
     } 

    def __init__(self, *args, **kwargs): 
     super(TaskForm, self).__init__(*args, **kwargs) 
     # set extra_admin_field value 

這裏有一個readonly小工具應該工作(我還沒有嘗試過):http://djangosnippets.org/snippets/1682/

+0

由於ModelAdmin有一個readonly_fields屬性,我猜在Django中已經存在類似的東西。我只想添加額外的字段到這個readonly_fields。 – jul 2013-03-12 08:58:38

+0

好吧你是對的,extra_admin_field是一個表單字段,而不是模型字段,所以我不能將它添加到modeladmin readonly_fields。 – jul 2013-03-12 09:46:50

相關問題