Определите пользовательскую форму для использования в Django ModelAdmin Add View - PullRequest
3 голосов
/ 13 января 2011

Я пытаюсь представить модель 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.

1 Ответ

7 голосов
/ 13 января 2011

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" при добавлении и все остальное в противном случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...