Определите пользовательскую форму для использования в Django ModelAdmin Add View

Я пытаюсь открыть модель Django в админке, используя класс 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