2009-05-21 10 views
0

при сохранении, если пользователь выбирает определенный вариант я хочу принять пользователя на страницу, где он может иметь еще одно поле, чтобы быть заполнены, а затем перенаправить на страницу администратора по умолчаниюСобирать дополнительную информацию на странице администрирования Django?

ответ

0

Вместо того, чтобы перенаправлять на новую страницу, вы можете просто override the form что используются страницы создания и обновления. Это позволяет добавлять дополнительные поля в форму модели, сохраняя всю обработку формы в одном месте.

Сначала вам нужно настроить ModelAdmin использовать пользовательскую форму:

admin.py

from django.contrib import admin 
from forms import BookAdminForm 
from models import Book 

class BookAdmin(admin.ModelAdmin): 
    form = BookAdminForm 

admin.site.register(Book, BookAdmin) 

forms.py

from django import forms 

class BookAdminForm(forms.ModelForm): 
    additional_field = forms.CharField(max_length=100) 

    class Meta: 
     model = Book 

Далее, вам понадобится override the save method, чтобы проверить, выбран ли «определенная опция», а затем обработать дополнительное поле ap propriately. Внутри вашего класса вам нужно что-то вроде этого:

def save(self, *args, **kwargs): 
    if self.cleaned_data['certain_field'].value == 'certain option': 
     # process additional_field 
    # don't forget to call super to save the rest of the form 
    super(BookAdminForm, self).save(*arg, **kwargs) 

ПРИМЕЧАНИЕ: Этот код не тестировался, но он должен направить вас в правильном направлении.

Также возможно использовать метод override the save_model() в ModelAdmin.

+1

Возможно, лучше здесь переопределить метод save_model класса admin, а не form.save, поскольку вам может понадобиться сделать что-то вроде перенаправления пользователя. –

+0

в этом я каждый раз показываю дополнительное поле. Но я хочу, когда есть определенное условие, только тогда оно отображается. Я использую javascript для этого, но хочу изменить. – ha22109

+0

Затем вы выходите за рамки администратора django. Весь смысл администратора - мгновенно получить администратор функциональной модели прямо из коробки. Маршрут javascript не является плохим решением. – Soviut

Смежные вопросы