auf speichern, wenn Benutzer bestimmte Option auswählen i Benutzer auf einer Seite nehmen will, wo er ein weiteres Feld ausgefüllt werden muß, kann und dann der Server-Betreiber StandardseiteZusätzliche Informationen in der Django-Verwaltungsseite sammeln?
Antwort
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.
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. –
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
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