0

に追加のフォーム フィールドを追加するreadonly_fieldsと、モデルのインスタンスの管理ページを開くときにエラーが発生しますModelAdminImproperlyConfigured

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

readonly_fields に余分なフィールドを追加するにはどうすればよいですか?

編集

フィールドが後に更新される可能性があると考えて、 get_form()ofでも試しました。TaskClosedAdminsuper(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',)
4

1 に答える 1

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

ここに動作するはずの読み取り専用ウィジェットがあります(私は試していません):http://djangosnippets.org/snippets/1682/

于 2013-03-11T19:43:49.207 に答える