Определите пользовательскую форму для использования в 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.

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

Другие вопросы по тегам