Heim  >  Artikel  >  Backend-Entwicklung  >  Djangoadminsite(一)ModelAdminOptions

Djangoadminsite(一)ModelAdminOptions

黄舟
黄舟Original
2016-12-23 17:44:111272Durchsuche

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

list_display = ('__str__', 'some_other_field')

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.db Modelle importieren

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)

def my_property(self):

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_display_links = ('first_name', 'last_name')

list_editable

Die Felder werden auf der Änderungslistenseite geändert . Die darin enthaltenen Felder müssen auch in list_display enthalten sein.

list_filter

Die darin enthaltenen Felder können als Filter zum Filtern des Modells verwendet werden. Kann eine verwandte Domäne sein.

class PersonAdmin(admin.UserAdmin):

list_filter = ('company__name',)

list_max_show_all

show all Die Anzahl der Modelle auf der Seite , es fehlen Save 200.


list_per_page

Die Anzahl der Modelle auf jeder Änderungslistenseite, der Standardwert ist 100.

list_select_lated

Bezogen auf select_lated().

Bestellung

Bestellung. Paginator, der von

Paginator

verwendet wird. Standard django.core.paginator.Paginator.

prepopulated_fields

Vorausgefüllte Felder.

radio_fields

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.

save_on_top

Wenn es auf „True“ gesetzt ist, wird oben auf der Änderungsseite auch eine Schaltfläche zum Speichern angezeigt.

Suchfelder

Durchsuchbare Felder.

view_on_site

Gibt an, ob der Link „Auf Website anzeigen“ angezeigt werden soll.

Vorlagenoptionen

Einige Optionen zur Angabe der Vorlage beim Anpassen der Admin-Vorlage.

add_form_template

Die von add_view() verwendete Vorlage.

change_form_template

Die von change_view() verwendete Vorlage.


change_list_template

Die von changelist_view() .


delete_confirmation_template

Die von delete_view() verwendete Vorlage.


delete_selected_confirmation_template

Die von der Aktionsmethode delete_selected verwendete Vorlage.


ModelAdmin.object_history_template

Von History_view() verwendete Vorlage und Protokoll.


Das Obige ist der Inhalt von Djangoadminsite (1) ModelAdminOptions. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn