2009-05-21 13 views

Antwort

0

eher auf eine neue Seite als Umleitung umleiten override the form Sie können einfach, dass die Erstellungs- und Aktualisierungsseiten verwenden. Auf diese Weise können Sie der Modellform zusätzliche Felder hinzufügen und so die gesamte Formularverarbeitung an einem Ort speichern.

Zuerst müssen Sie Ihre Modeladmin einzurichten, das benutzerdefinierte Formular zu verwenden:

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 

Als nächstes Sie müssen override the save method überprüfen, ob die "bestimmte Option" ausgewählt ist, und dann das zusätzliche Feld ap behandeln passend. Innerhalb Klasse hast du so etwas wie dieses benötigen:

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) 

Hinweis: dieser Code nicht getestet, aber es sollte Sie in die richtige Richtung weisen.

Es ist auch möglich, override the save_model() Methode im ModelAdmin.

+1

Es könnte besser sein, hier die save_model-Methode der Admin-Klasse anstelle von form.save zu überschreiben, da Sie möglicherweise etwas wie den Benutzer umleiten müssen. –

+0

In diesem zeige ich das zusätzliche Feld jedes Mal an. Aber ich will, wenn es bestimmte Bedingung nur dann gibt, wird es angezeigt. Ich verwende Javascript dafür, aber will mich ändern. – ha22109

+0

Du gehst dann über den Umfang des django Admins hinaus. Der ganze Sinn des Administrators ist es, sofort einen funktionsfähigen Modelladministrator zu haben. Die JavaScript-Route ist keine schlechte Lösung. – Soviut

Verwandte Themen