Дефинирайте персонализиран формуляр за използване в Django's ModelAdmin Add View

Опитвам се да изложа Django модел в admin, използвайки класа ModelAdmin. ModelAdmin изглежда предполага, че използвате същия формуляр за добавяне и промяна. Бих искал add_view да използва опростен формуляр, който изброява само няколко задължителни полета. След изпращане, той ще пренасочи към change_view и ще използва формата по подразбиране на ModelForm, за да изобрази почти всички полета.

Кой е най-лесният начин да направите това? Проверих кода, но не виждам ясен начин. ModelAdmin има тенденция да се позовава на една препратка към self.form както в add_view, така и в change_view. Мисля да заменя add_view(), но не искам да прилагам отново целия код. Може да е по-ефективно да се замени get_form(), но не виждам как да открия дали get_form() се извиква по време на add_view или change_view.


person Cerin    schedule 13.01.2011    source източник


Отговори (1)


get_form() получава obj параметър при извикване по време на change_view. Просто открийте, че връща новите параметри за формуляр/ощипване, ако е необходимо.

Например:


class MyModelAdmin(admin.ModelAdmin):
    def get_form(self, request, obj=None, **kwargs):
        # hide every other field apart from url
        # if we are adding
        if obj is None:
            kwargs['fields'] = ['url']
        return super(MyModelAdmin, self).get_form(request, obj, **kwargs)

Ще принуди формуляра да показва само полето „url“ при добавяне и всичко останало в противен случай.

person John Montgomery    schedule 13.01.2011
comment
Като цяло това е правилната идея, но се оказва, че трябва да отменя много повече от това. Класът UserAdmin в django/contrib/auth/admin.py е добър пример. - person Cerin; 13.01.2011