Подтвердить что ты не робот

Использование произвольных методов или атрибутов в качестве полей объектов Django ModelAdmin?

Использование Django 1.1:

Django admin docs описывает с использованием произвольных методов или атрибутов объекта ModelAdmin в атрибуте class list_display. Это отличный механизм для отображения произвольной информации на дисплее списка для модели. Однако, похоже, не существует аналогичного механизма для самой страницы формы изменения. Каков самый простой способ выполнить эту полезную небольшую функцию для отображения произвольной, не связанной с полем информации на странице формы изменения ModelAdmin?

Конкретный пример желаемой настройки:

class CustomUserAdmin(UserAdmin):
    def registration_key(self, obj):
        """Special method for looking up and returning the user registration key
        """
        return 'the_key'

    list_display = ('email', 'first_name', 'last_name', 'is_active', 'is_staff', 
                    'registration_key')  # <- this works

    fields = ('email', 'first_name', 'last_name', 'is_active', 'is_staff',
              'registration_key')  # <- this DOESN'T work?
4b9b3361

Ответ 1

Добавьте метод к кортежу "readonly_fields".

Ответ 2

Попробуйте следующее:

class CustomUserAdminForm(forms.ModelForm):
    registration_key = forms.IntegerField()                                 

    class Meta: 
        model = User   

class CustomUserAdmin(UserAdmin):
    def registration_key(self, obj):
        """Special method for looking up and returning the user registration key
        """
        return 'the_key'

    list_display = ('email', 'first_name', 'last_name', 'is_active', 'is_staff', 
                    'registration_key')  # <- this works

    fields = ('email', 'first_name', 'last_name', 'is_active', 'is_staff',
              'registration_key')

Ответ 3

Я сделал это раньше, переопределив шаблон для формы изменения и получив доступ к пользовательским методам модели. Использование fields просит администратора попытаться добавить поле формы для вашего метода.