Heim >Backend-Entwicklung >Python-Tutorial >Djangoadminsite(一)ModelAdminOptions
Die Admin-Verwaltungsoberfläche ist Djangos Killeranwendung. Es liest die Metadaten in Ihrem Schema und stellt Ihnen dann eine leistungsstarke und benutzerfreundliche Schnittstelle zur Verfügung, mit der Website-Administratoren sofort Inhalte zur Website hinzufügen können.
Um Admin zu verwenden, können Sie die folgenden Schritte ausführen:
Fügen Sie „django.contrib.admin“ zur INSTALLED_APPS-Konfiguration der Einstellung hinzu.
Stellen Sie sicher, dass INSTALLED_APPS „django.contrib.auth“, „django.contrib.contenttypes“, „django.contrib.messages“ und „django.contrib.sessions“ enthält. Der Django-Administrator benötigt diese 4 Beutel.
Fügen Sie „django.contrib.messages.context_PRocessors.messages“ zu TEMPLATE_CONTEXT_PROCESSORS hinzu und stellen Sie sicher, dass MIDDLEWARE_CLASSES „django.contrib.auth.middleware.AuthenticationMiddleware“ und „django.contrib.messages.middleware.MessageMiddleware“ enthält. (Standardmäßig hinzugefügt)
Bestimmen Sie, welche Modelle auf den Administrator angewendet werden müssen.
Erstellen Sie in admin.py in jeder App, die Administrator erfordert, einen ModelAdmin.
Register Model und ModelAdmin
from django.contrib import admin
from myproject.myapp.models import Author
class AuthorAdmin(admin.ModelAdmin):
pass
admin.site.register(Author, AuthorAdmin)
Administratorzugriff in URLconf konfigurieren
von django.contrib import admin
admin.autodiscover()
# Und fügen Sie dieses URL-Muster ein...
urlpatterns = patterns('',
# ...
(r'^admin/', include(admin.site.urls) ),
# ...
)
Führen Sie python manage.py migrate aus, um Sie daran zu erinnern, einen Superuser zu erstellen, und Sie können auf http://127.0.0.1:8000/admin/ zugreifen.
ModelAdmin-Objekt
Register Decorator
register(*models[, site=django.admin.sites.site])
Neu hinzugefügt in 1.7. Model und ModelAdmin können wie folgt registriert werden:
from django.contrib import admin
from .models import Author
@admin.register(Author)
class AuthorAdmin(admin. ModelAdmin) :
pass
Sie können mehrere Modelle gleichzeitig registrieren und Ihre eigene benutzerdefinierte AdminSite verwenden:
von django.contrib import admin
von .models import Author, Reader, Editor
from myproject.admin_site import custom_admin_site
@admin.register(Author, Reader, Editor, site=custom_admin_site)
class PersonAdmin(admin.ModelAdmin):
pass
So funktioniert Admin
Wenn „django.contrib.admin“ zu INSTALLED_APPS hinzugefügt wird, findet Django automatisch das admin.py-Modul in jeder App und importiert es.
Klasse apps.AdminConfig
Django 1.7 neu.
Admin-Standard-AppConfig-Klasse wird beim Start von Django ausgeführt.
Klasse apps.SimpleAdminConfig
Neu in Django 1.7.
Ähnlich wie bei AdminConfig wird autodiscover() nicht ausgeführt.
autodiscover()
jeder Administrator wird importiert app .py-Modul.
Änderungen in Django 1.7:
In früheren Versionen mussten Sie diese Methode manuell in urls.py starten, um die admin.py jeder App zu finden. Nach 1.7 führt AdminConfig diese Methode automatisch aus.
Wenn Sie eine angepasste AdminSite verwenden, müssen Sie die Unterklassen von ModelAdmin in Ihren eigenen Code laden und sie alle in der angepassten AdminSite registrieren. In diesem Fall müssen Sie die automatische Erkennung () stoppen und können „django.contrib.admin“ in INSTALLED_APPS durch „django.contrib.admin.apps.SimpleAdminConfig“ ersetzen.
ModelAdmin-Optionen
Aktionen
Liste der Administratoraktionen
actions_on_top
actions_on_bottom
Der Ort der Aktion.
date_hierarchy
Setzen Sie date_hierarchy auf das DateField oder DateTimeField des Modells, um diesem Modell im Admin eine Datumshierarchie hinzuzufügen.
Felder
ausschließen
bestimmt, welche Felder im Formular des Modells angezeigt werden. Felder schließen ein, ausschließen schließt aus.
von django.contrib import admin
Klasse AuthorAdmin(admin.ModelAdmin):
felder = ('name', 'title')
Klasse AuthorAdmin(admin .ModelAdmin):
exclude = ('birth_date',)
Sie können einige Felder in dieselbe Zeile einfügen, z. B. die folgenden URL- und Titelfelder in dieselbe Zeile:
Klasse FlatPageAdmin(admin.ModelAdmin):
fields = (('url', 'title'), 'content')
fieldsets
fieldsets ist ein Doppeltupel ( name, field_options), die Felder können in Blöcke unterteilt werden:
from django.contrib import admin
class FlatPageAdmin(admin.ModelAdmin):
fieldsets = (
(Keine) , {
. 'collapse',),
'fields': ('enable_comments', 'registration_required', 'template_name')
}),
)
name ist der Titel des Blocks und field_options ist ein Wörterbuch. Die Schlüssel von
field_options lauten wie folgt:
felder
Ein Tupel von Feldnamen, angezeigt im Feldsatz
{
'fields' : (('Vorname', 'Nachname'), 'Adresse', 'Stadt', 'Bundesland'),
}
Klassen
Extra zur Feldsatzliste bereitgestellt von CSS-Klassen.
Beschreibung
Zusätzlicher Text, der oben im Feldsatz angezeigt werden kann.
filter_horizontal
filter_vertical
Wenn das Modell ein ManyToManyField-Feld hat, verwenden Sie filter_horizontal, und filter_vertical kann aus den vorhandenen Optionen ausgewählt werden. Einer ist horizontal und einer ist vertikal.
Formular
Das verwendete Formular.
aus Django-Importformulare
aus Django.contrib-Importadministrator
aus myapp.models-Importperson
Klasse PersonForm(forms.ModelForm):
Klasse Meta :
Model = Person
Exclude = ['Name']
Klasse PersonAdmin(admin.ModelAdmin):
Exclude = ['Alter']
Form = PersonForm
Wenn ein Konflikt auftritt, hat ModelAdmin Vorrang. Im obigen Beispiel wird das Alter ausgeschlossen, aber der Name wird auf der Seite angezeigt.
formfield_overrides
Sie können die Optionen einiger Felder in der Modellformularschnittstelle überschreiben und Ihre eigenen benutzerdefinierten Komponenten für bestimmte Feldtypen hinzufügen
Zum Beispiel, wenn Sie möchten Fügen Sie das TextField-Feld Ihres eigenen Modells hinzu. Verwenden Sie einen Rich-Text-Editor:
von django.db import models
von django.contrib import admin
# Importieren Sie unser benutzerdefiniertes Widget und unser Modell von dort, wo sie sind 'sind definiert
from myapp.widgets import RichTextEditorWidget
from myapp.models import MyModel
class MyModelAdmin(admin.ModelAdmin):
formfield_overrides = {
models.TextField: {' widget': RichTextEditorWidget},
}
list_display
Felder, die auf der Änderungslistenseite des Modells angezeigt werden können, wird die Admin-Oberfläche automatisch angezeigt die __unicode__()-Ergebnisse des Modells.
Es gibt 4 Werte in list_display:
Ein Feld des Modells
list_display = ('first_name', 'last_name')
Eine aufrufbare Funktion mit Modell als Parameter
defupper_case_name(obj):
return ("%s %s" % (obj.first_name, obj.last_name)).upper()
upper_case_name .short_description = 'Name'
class PersonAdmin(admin.ModelAdmin):
list_display = (upper_case_name,)
Ein Attribut von ModelAdmin, ähnlich einer aufrufbaren Funktion
class PersonAdmin(admin.ModelAdmin):
list_display = ('upper_case_name',)
defupper_case_name(self, obj):
return ("%s %s" % ( obj.first_name, obj.last_name)).upper()
upper_case_name.short_description = 'Name'
Ein Attribut von Model, ähnlich der aufrufbaren Funktion
von Django .db Modelle importieren
von django.contrib Import Admin
Klasse Person(models.Model):
Name = models.CharField(max_length=50)
Geburtstag = models.DateField( )
def dekade_born_in(self):
return self.birthday.strftime('%Y')[:3] + "0's"
dekaden_born_in.short_description = 'Geburtsjahrzehnt'
class PersonAdmin(admin.ModelAdmin):
list_display = ('name', 'decade_born_in')
Hinweis:
Wenn das Feld ForeignKey ist, wird es so sein angezeigt Der __unicode__ des Schlüssels.
ManyToManyField wird nicht unterstützt
Wenn es sich um ein BooleanField handelt, wird „on“ oder „off“ angezeigt.
Wenn es sich bei der bereitgestellten Zeichenfolge um eine Methode von Model oder ModelAdmin oder eine aufrufbare Funktion handelt, wird Django die Ausgabe automatisch mit einem HTML-Escapezeichen versehen. Wenn Sie kein Escapezeichen möchten, können Sie die „allow_tags“ der Methode auf „True“ setzen. Um XSS-Cross-Site-Angriffe zu vermeiden, müssen Sie format_html verwenden, um die Eingabe des Benutzers zu maskieren:
aus django.db import models
aus django.contrib import admin
aus django.utils.html import format_html
class Person(models.Model):
first_name = models. CharField(max_length=50)
last_name = models.CharField(max_length=50)
color_code = models.CharField(max_length=6)
def coloured_name(self):
return format_html( '{1} {2}',
self.last_name )
colored _name.allow_tags = True
class PersonAdmin(admin.ModelAdmin):
list_display = ('first_name', 'last_name', 'colored_name')
Wenn die bereitgestellte Zeichenfolge eine Methode von Model oder ist Wenn Sie ModelAdmin oder eine aufrufbare Funktion verwenden und „True“ oder „False“ zurückgeben, können Sie das boolesche Attribut der Methode auf „True“ setzen. Auf diese Weise wird das Ein- oder Aus-Symbol auf der Seite angezeigt.
aus django.db Importmodelle
aus django.contrib Importadministrator
Klasse Person(models.Model):
vorname = models.CharField(max_length=50)
birthday = models.DateField()
def born_in_fifties(self):
return self.birthday.strftime('%Y')[:3] == '195'
born_in_fifties.boolean = True
class PersonAdmin(admin.ModelAdmin):
list_display = ('name', 'born_in_fifties')
Models __str__- oder __unicode__-Methode ist auch Sie können
Wenn die Elemente in list_display keine tatsächlichen Felder der Datenbank sind, können Sie nicht nach diesem Element sortieren. Andernfalls können Sie nach diesem Artikel bestellen und auf diese Tatsache hinweisen, indem Sie das Attribut admin_order_field festlegen.
aus django.contrib admin importieren
aus django.utils.html format_html importieren
Klasse Person(Modelle.Modell):
Vorname = models.CharField(max_length=50)
color_code = models.CharField(max_length=6)
def coloured_first_name(self):
return format_html('{1}',
_Tags = > farbig _first_name.admin_order_field = ' first_name'
class PersonAdmin(admin.ModelAdmin):
list_display = ('first_name', 'colored_first_name')
Beim Versuch, nach farbigem_Vornamen zu sortieren, sortiert Django nach Vorname. Kann in umgekehrter Reihenfolge sortiert werden:
colored_first_name.admin_order_field = '-first_name'
Elemente in list_display können auch Attribute sein:
class Person(object):
Vorname = models.CharField(max_length=50) Nachname = models.CharField(max_length=50)
return self.first_name + ' ' + self. last_name
my_property.short_description = "Vollständiger Name der Person"
full_name = property(my_property)
class PersonAdmin(admin.ModelAdmin):
list_display = ('full_name' ,)
list_display_link
Die Felder werden mit der Modusänderungsseite verknüpft
class PersonAdmin(admin.ModelAdmin):
list_display = (' first_name ', 'last_name', 'birthday')
list_editable
Die Felder werden auf der Änderungslistenseite geändert . Die darin enthaltenen Felder müssen auch in list_display enthalten sein.
list_filter
list_filter = ('company__name',)
list_max_show_allshow all Die Anzahl der Modelle auf der Seite , es fehlen Save 200.
list_per_page
Verwenden Sie das Optionsfeld anstelle des Auswahlfelds (ForeignKey oder wenn es eine Auswahloption gibt).
class PersonAdmin(admin.ModelAdmin):
radio_fields = {"group": admin.VERTICAL}
raw_id_fields
zeigt die IDs der an Felder, die für ForeignKey oder ManyToManyField verwendet werden.
class ArticleAdmin(admin.ModelAdmin):
raw_id_fields = ("Zeitung")
readonly_fields
Nur lesbare und nicht bearbeitbare Felder. Es kann auch eine Methode sein:
from django.contrib import admin
from django.utils.html import format_html_join
from django.utils.safestring import mark_safe
class PersonAdmin( admin. ModelAdmin):
readonly_fields = ('address_report',)
def address_report(self, example):
# unter der Annahme, dass get_full_address() eine Liste von Zeichenfolgen zurückgibt
# für jede Zeile der Adresse und Sie möchten jede Zeile durch einen Zeilenumbruch trennen. ((( line,) für Zeile in example.get_full_address()),
) oder „Ich kann diese Adresse nicht ermitteln.“
# short_description funktioniert wie ein Modellfeld verbose_name
address_report.short_description = "Address"
# in diesem Beispiel haben wir HTML-Tags in der Ausgabe verwendet
address_report.allow_tags = True
When save_as
auf True gesetzt ist, wird die Schaltfläche „Speichern und weitere hinzufügen“ auf der Änderungsseite durch „Speichern unter“ ersetzt.
Die von add_view() verwendete Vorlage.
change_form_template
Die von change_view() verwendete Vorlage.
change_list_template
delete_confirmation_template
delete_selected_confirmation_template
ModelAdmin.object_history_template
Das Obige ist der Inhalt von Djangoadminsite (1) ModelAdminOptions. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!