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