Heim Backend-Entwicklung Python-Tutorial Djangoadminsite(一)ModelAdminOptions

Djangoadminsite(一)ModelAdminOptions

Dec 23, 2016 pm 05:44 PM

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)!

Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie löste ich das Problem der Berechtigungen beim Betrachten der Python -Version in Linux Terminal? Wie löste ich das Problem der Berechtigungen beim Betrachten der Python -Version in Linux Terminal? Apr 01, 2025 pm 05:09 PM

Lösung für Erlaubnisprobleme beim Betrachten der Python -Version in Linux Terminal Wenn Sie versuchen, die Python -Version in Linux Terminal anzuzeigen, geben Sie Python ein ...

Wie benutze ich eine schöne Suppe, um HTML zu analysieren? Wie benutze ich eine schöne Suppe, um HTML zu analysieren? Mar 10, 2025 pm 06:54 PM

In diesem Artikel wird erklärt, wie man schöne Suppe, eine Python -Bibliothek, verwendet, um HTML zu analysieren. Es beschreibt gemeinsame Methoden wie find (), find_all (), select () und get_text () für die Datenextraktion, die Behandlung verschiedener HTML -Strukturen und -Anternativen (SEL)

Serialisierung und Deserialisierung von Python -Objekten: Teil 1 Serialisierung und Deserialisierung von Python -Objekten: Teil 1 Mar 08, 2025 am 09:39 AM

Serialisierung und Deserialisierung von Python-Objekten sind Schlüsselaspekte eines nicht trivialen Programms. Wenn Sie etwas in einer Python -Datei speichern, führen Sie eine Objektserialisierung und Deserialisierung durch, wenn Sie die Konfigurationsdatei lesen oder auf eine HTTP -Anforderung antworten. In gewisser Weise sind Serialisierung und Deserialisierung die langweiligsten Dinge der Welt. Wen kümmert sich um all diese Formate und Protokolle? Sie möchten einige Python -Objekte bestehen oder streamen und sie zu einem späteren Zeitpunkt vollständig abrufen. Dies ist eine großartige Möglichkeit, die Welt auf konzeptioneller Ebene zu sehen. Auf praktischer Ebene können das von Ihnen ausgewählte Serialisierungsschema, Format oder Protokoll jedoch die Geschwindigkeit, Sicherheit, den Status der Wartungsfreiheit und andere Aspekte des Programms bestimmen

Wie führe ich ein tiefes Lernen mit Tensorflow oder Pytorch durch? Wie führe ich ein tiefes Lernen mit Tensorflow oder Pytorch durch? Mar 10, 2025 pm 06:52 PM

Dieser Artikel vergleicht TensorFlow und Pytorch für Deep Learning. Es beschreibt die beteiligten Schritte: Datenvorbereitung, Modellbildung, Schulung, Bewertung und Bereitstellung. Wichtige Unterschiede zwischen den Frameworks, insbesondere bezüglich des rechnerischen Graps

Mathematische Module in Python: Statistik Mathematische Module in Python: Statistik Mar 09, 2025 am 11:40 AM

Das Statistikmodul von Python bietet leistungsstarke Datenstatistikanalysefunktionen, mit denen wir die allgemeinen Merkmale von Daten wie Biostatistik und Geschäftsanalyse schnell verstehen können. Anstatt Datenpunkte nacheinander zu betrachten, schauen Sie sich nur Statistiken wie Mittelwert oder Varianz an, um Trends und Merkmale in den ursprünglichen Daten zu ermitteln, die möglicherweise ignoriert werden, und vergleichen Sie große Datensätze einfacher und effektiv. In diesem Tutorial wird erläutert, wie der Mittelwert berechnet und den Grad der Dispersion des Datensatzes gemessen wird. Sofern nicht anders angegeben, unterstützen alle Funktionen in diesem Modul die Berechnung der Mittelwert () -Funktion, anstatt einfach den Durchschnitt zu summieren. Es können auch schwimmende Punktzahlen verwendet werden. zufällig importieren Statistiken importieren Aus Fracti

Schaberwebseiten in Python mit wunderschöner Suppe: Suche und DOM -Modifikation Schaberwebseiten in Python mit wunderschöner Suppe: Suche und DOM -Modifikation Mar 08, 2025 am 10:36 AM

Dieses Tutorial baut auf der vorherigen Einführung in die schöne Suppe auf und konzentriert sich auf DOM -Manipulation über die einfache Baumnavigation hinaus. Wir werden effiziente Suchmethoden und -techniken zur Änderung der HTML -Struktur untersuchen. Eine gemeinsame DOM -Suchmethode ist Ex

Was sind einige beliebte Python -Bibliotheken und ihre Verwendung? Was sind einige beliebte Python -Bibliotheken und ihre Verwendung? Mar 21, 2025 pm 06:46 PM

In dem Artikel werden beliebte Python-Bibliotheken wie Numpy, Pandas, Matplotlib, Scikit-Learn, TensorFlow, Django, Flask und Anfragen erörtert, die ihre Verwendung in wissenschaftlichen Computing, Datenanalyse, Visualisierung, maschinellem Lernen, Webentwicklung und h beschreiben

Wie erstelle ich Befehlszeilenschnittstellen (CLIS) mit Python? Wie erstelle ich Befehlszeilenschnittstellen (CLIS) mit Python? Mar 10, 2025 pm 06:48 PM

Dieser Artikel führt die Python-Entwickler in den Bauen von CLIS-Zeilen-Schnittstellen (CLIS). Es werden mit Bibliotheken wie Typer, Click und ArgParse beschrieben, die Eingabe-/Ausgabemedelung betonen und benutzerfreundliche Designmuster für eine verbesserte CLI-Usabilität fördern.

See all articles