Heim > Artikel > Backend-Entwicklung > Djangoadminsite(二)ModelAdminmethods
ModelAdmin-Methoden
save_model(request, obj, form, change)
Diese Methode ist das Verhalten beim Speichern von Modellinstanzen für Benutzer der Admin-Oberfläche. request ist eine HttPRequest-Instanz, obj ist eine Modellinstanz, form ist eine ModelForm-Instanz und change ist ein bool-Wert, je nachdem, ob die Modellinstanz neu oder geändert ist.
Durch das Überschreiben dieser Methode können einige Aktionen vor oder nach dem Speichern ausgeführt werden.
Zum Beispiel können Sie request.user als Attribut der Modellinstanz speichern:
from django.contrib import admin
class ArticleAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
obj.user = request.user
obj.save()
delete_model(request, obj)
Methode, wenn der Benutzer der Admin-Schnittstelle die Modellinstanz löscht.
save_formset(request, form, formset, change)
Die Methode für Benutzer der Admin-Schnittstelle zum Speichern des Formularsatzes kann umgeschrieben werden:
class ArticleAdmin(admin.ModelAdmin):
def save_formset(self, request, form, formset, change):
instances = formset.save(commit=False)
zum Beispiel in Instanzen:
instance.user = request.user
Instanz. save()
formset.save_m2m()
get_ordering(request)
Sortieren.
class PersonAdmin(admin.ModelAdmin):
def get_ordering(self, request):
if request.user.is_superuser:
return ['name', 'rank' ]
else:
return ['name']
get_search_results(request, queryset, search_term)
Sie können die Abfrageergebnisse anpassen.
save_lated(request, form, formsets, change)
formets ist eine Liste der Inline-Formularsätze des Modells. Verhalten beim Speichern modellbezogener Objekte.
def save_related(self, request, form, formsets, change):
"""
Gegeben ist die „HttpRequest“, die übergeordnete „ModelForm“-Instanz, die
Liste der Inline-Formularsätze und ein boolescher Wert basierend darauf, ob das
übergeordnete Element hinzugefügt oder geändert wird. Speichern Sie die zugehörigen Objekte in der
Datenbank. Beachten Sie, dass save_form() und save_model() zu diesem Zeitpunkt bereits vorhanden sind wurde aufgerufen. >get_readonly_fields(request, obj=None)
Schreibgeschützte Felder zurückgeben.
get_prepopulated_fields(request, obj=None)
Gibt vorab ausgefüllte Felder zurück.
get_list_display(request)
list_display zurückgeben.
get_list_display_links(request, list_display)
list_display_link zurückgeben.
get_fields(request, obj=None)
Felder zurückgeben. get_fieldsets(request, obj=None)Feldsätze zurückgeben.
get_list_filter(request)
list_filter zurückgeben.
get_search_fields(request)
get_inline_instances(request, obj=None)
class MyModelAdmin(admin.ModelAdmin):
return [inline(self.model, self.admin_site) for inline in self.inlines]
get_urls()
Gibt die verfügbaren URLs von ModelAdmin zurück.
class MyModelAdmin(admin.ModelAdmin):
def get_urls(self):
urls = super(MyModelAdmin, self).get_urls()
my_urls = patterns('',
(r'^my_view/$', self.my_view)
(r'^my_view/$', self.my_view)
def my_view(self, request):
# benutzerdefinierte Ansicht, die eine HttpResponse zurückgeben soll
pass
Der Pfad der my_view-Methode oben ist /admin/myapp/mymodel/my_view/.
Im obigen Beispiel gibt es jedoch keine Verifizierung und kein Caching. Verifizierung und Caching müssen bereitgestellt werden:
class MyModelAdmin(admin.ModelAdmin):
def get_urls(self):
urls = super(MyModelAdmin, self).get_urls()
my_urls = patterns('',
(r '^my_view/$', self.admin_site.admin_view(self.my_view))
) )
my_urls + urls zurückgeben
Wenn die Seite zwischengespeichert werden kann, die Berechtigungsüberprüfung jedoch noch erfolgt erforderlich:
(r'^my_view/$', self.admin_site.admin_view(self.my_view, cacheable=True))
get_form(request, obj=None, * *kwargs)
Gibt die ModelForm zurück, die zum Hinzufügen und Ändern von Ansichten verwendet wird. Einige Felder werden ausgeblendet, wenn der unten aufgeführte Benutzer kein Superuser ist.
class MyModelAdmin(admin.ModelAdmin):
def get_form(self, request, obj=None, **kwargs):
self.exclude = []
if not request.user .is_superuser:
one)
Ergibt InlineModelAdmins für die Verwendung in Admin-Ansichten zum Hinzufügen und Ändern.
Wenn Sie nur eine spezielle Inline in der Änderungsansicht anzeigen möchten:
class MyModelAdmin( admin.ModelAdmin):
inlines = [MyInline, SomeOtherInline] def get_formsets(self, request, obj=None): für inline in self.get_inline_instances( Anfrage, obj):
Sie möchten nur eine spezielle Inline in der Änderungsansicht anzeigen:
class MyModelAdmin(admin.ModelAdmin):
inlines = [MyInline, SomeOtherInline]
def get_formsets_with_inlines(self, request, obj=Keine):
für inline in self.get_inline_instances( request, obj):
, obj), inline
Das vom Foreignkey-Feld verwendete Standardformfeld gibt je nach Benutzer unterschiedliche Teilmengen zurück:
class MyModelAdmin(admin.ModelAdmin) :
def formfield_for_foreignkey(self, db_field, request, **kwargs):if db_field.name == "car":
kwargs["queryset"] = Car.objects.filter(owner=request .user) return super(MyModelAdmin, self).formfield_for_foreignkey(db_field, request , **kwargs)
formfield_for_manytomany(db_field, request, **kwargs)
Ähnlich Für formfield_for_foreignkey wird diese Methode für viele bis viele Felder verwendet.:
class MyModelAdmin(admin.ModelAdmin):
def formfield_for_manytomany(self, db_field, request, **kwargs):
if db_field. name == "Cars":
Return Super (mymodeladmin, Self) .formfield_manytomany (DB_F Ield, Request, ** KWARGS)
ModelAdmin.formfield_for_choice_field(db_field, request, **kwargs)
Ähnlich wie formfield_for_foreignkey und formfield_for_manytomany wird diese Methode für Auswahlmöglichkeiten verwendet:
class MyModelAdmin(admin.ModelAdmin):
def formfield_for_choice_field(self, db_field, request, ** kwargs):
if db_field.name == "status":
('accept ed', ' Accepted'),
('denied', ' Verweigert'),)
if request.user.is_superuser: kwargs['choices'] += (( 'ready', 'Ready for Deployment'),)
return super(MyModelAdmin , self).formfield_for_choice_field(db_field, request, **kwargs)
ModelAdmin.get_changelist(request, **kwargs)
Gibt die von der Changelist-Seite verwendete Changelis-Klasse zurück. Der Standardwert ist django.contrib.admin.views.main.ChangeList.
ModelAdmin.get_changelist_form(request, **kwargs)
Gibt die ModelForm-Klasse zurück, die von der Änderungslistenseite verwendet wird.
aus Django-Importformularen
class MyForm(forms.ModelForm):
pass
class MyModelAdmin(admin.ModelAdmin):
def get_changelist_form(self, request, **kwargs):
myForm zurückgeben
ModelAdmin.get_changelist_formset(request, **kwargs)
Die ModelFormSet-Klasse zurückgeben, die von der Änderungslistenseite verwendet wird.
von django.forms.models import BaseModelFormSet
class MyAdminFormSet(BaseModelFormSet):
pass
class MyModelAdmin(admin.ModelAdmin):
def get_changelist_formset( self, request, **kwargs):
kwargs['formset'] = MyAdminFormSet
return super(MyModelAdmin, self).get_changelist_formset(request, **kwargs)
ModelAdmin. has_add_permission(request)
Gibt an, ob es die Berechtigung zum Hinzufügen hat.
ModelAdmin.has_change_permission(request, obj=None)
Ob es über eine Änderungsberechtigung verfügt.
ModelAdmin.has_delete_permission(request, obj=None)
Ob es über eine Löschberechtigung verfügt.
ModelAdmin.get_queryset(request)
Gibt den bearbeitbaren Modell-QuerySet-Satz in der Admin-Oberfläche zurück. Je nach Benutzer unterschiedliche Ergebnisse zurückgeben:
class MyModelAdmin(admin.ModelAdmin):
def get_queryset(self, request):
qs = super(MyModelAdmin, self).get_queryset(request)
if request.user.is_superuser:
return qs
return qs.filter(author=request.user)
ModelAdmin.message_user(request, message, level=messages. INFO , extra_tags='', fail_silently=False)
Senden Sie Nachrichten an Benutzer über das django.contrib.messages-Backend.
ModelAdmin.get_paginator(queryset, per_page, orphans=0,allow_empty_first_page=True)
Gibt eine Paginierungsinstanz zurück. Gibt eine Instanz des Paginators zurück, die für diese Ansicht verwendet werden soll. Standardmäßig wird eine Instanz des Paginators instanziiert.
ModelAdmin.response_add(request, obj, post_url_continue=None)
Bestimmt die HttpResponse von add_view(), Modell Nach der Erstellung ausführen.
ModelAdmin.response_change(request, obj)
Bestimmt die HttpResponse von change_view() und wird ausgeführt, nachdem das Modell geändert wurde.
ModelAdmin.response_delete(request, obj_display)
Bestimmt die HttpResponse von delete_view() und führt sie aus, nachdem das Modell gelöscht wurde.
obj_display ist der Name des gelöschten Objekts.
ModelAdmin.get_changeform_initial_data(request)
Ein Hook für die Anfangsdaten auf Admin-Änderungsformularen. Standardmäßig werden Felder mit Anfangswerten aus GET-Parametern versehen Der Anfangswert des Namensfelds muss initial_value sein.
Diese Methode sollte ein Wörterbuch in der Form {'fieldname': 'fieldval'} zurückgeben:
def get_changeform_initial_data(self, request):
return { 'name': 'custom_initial_value'🎜>
Django-Ansicht für das Modell Seite zum Hinzufügen von Instanzen. Siehe Hinweis unten.
Django-Ansicht für die Modellinstanz-Editionsseite >ModelAdmin.changelist_view(request, extra_context=None)
Django-Ansicht für die Änderungsliste/Aktionsseite der Modellinstanzen. Siehe Hinweis unten.
ModelAdmin.delete_view(request, object_id, extra_context=None)
Django-Ansicht für die Modellinstanz (s) Löschbestätigungsseite einer bestimmten Modellinstanz.
Diese fünf Methoden sind tatsächlich als Djangos Ansichtsmethoden festgelegt. Es kann umgestaltet werden, normalerweise durch Hinzufügen der Kontextdaten der Vorlage, die zum Rendern der Ansicht verwendet wird:
# Eine Vorlage für eine sehr angepasste Änderungsansicht:
# ...
pass
def change_view(self, request, object_id, form_url='', extra_context=None):
extra_context = extra_context oder {}
extra_context['osm_data'] = self.get_osm_info()
return super(MyModelAdmin, self).change_view (request, object_id ,
form_url, extra_context=extra_context)
ModelAdmin-Asset-Definitionen
JS und CSS für die Add-/Änderungsansichten von ModelAdmin hinzufügen:
Class ArticleAdmin (admin.modeladmin):
Class Media:
CSS = {
"ALL": ("My_styles.css")
🎜> js = ("My_Codee .js ",)
def clean_name(self ; The Oben ist der Inhalt von Djangoadminsite (2) ModelAdminmethods. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn).