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

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



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 ...

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

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

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

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

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

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.
