Maison >développement back-end >Tutoriel Python >Djangoadminsite(一)ModelAdminOptions

Djangoadminsite(一)ModelAdminOptions

黄舟
黄舟original
2016-12-23 17:44:111317parcourir

L’interface de gestion Admin est l’application phare de Django. Il lit les métadonnées de votre schéma et vous fournit ensuite une interface puissante et utilisable que les administrateurs de sites Web peuvent utiliser pour ajouter instantanément du contenu au site Web.

Pour utiliser admin, vous pouvez suivre les étapes ci-dessous :

Ajoutez 'django.contrib.admin' à la configuration du paramètre INSTALLED_APPS.

Assurez-vous que INSTALLED_APPS contient 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.messages' et 'django.contrib.sessions.', l'administrateur de Django a besoin de ces 4 sacs.

Ajoutez 'django.contrib.messages.context_PRocessors.messages' à TEMPLATE_CONTEXT_PROCESSORS et assurez-vous que MIDDLEWARE_CLASSES contient 'django.contrib.auth.middleware.AuthenticationMiddleware' et 'django.contrib.messages.middleware.MessageMiddleware' . (Ajouté par défaut)

Déterminez quels modèles doivent être appliqués à l'administrateur.

Créez un ModelAdmin dans admin.py dans chaque application nécessitant un administrateur.

Enregistrer le modèle et ModelAdmin

depuis django.contrib import admin
depuis myproject.myapp.models import Author

class AuthorAdmin(admin.ModelAdmin):
pass
admin.site.register(Author, AuthorAdmin)

Configurer l'accès administrateur dans URLconf

à partir de django.contrib import admin
admin.autodiscover()

# Et incluez ce modèle d'URL...
urlpatterns = patterns('',
# ...
(r'^admin/', include(admin.site.urls) ),
# ...
)

Exécutez python manage.py migrate pour vous rappeler de créer un superutilisateur et vous pourrez accéder à http://127.0.0.1:8000/admin/.

Objet ModelAdmin

register decorator

register(*models[, site=django.admin.sites.site])

Nouvellement ajouté dans la version 1.7. Model et ModelAdmin peuvent être enregistrés comme ceci :

from django.contrib import admin
from .models import Author

@admin.register(Author)
class AuthorAdmin(admin. ModelAdmin) :
pass

Vous pouvez enregistrer plusieurs modèles à la fois et vous pouvez utiliser votre propre AdminSite personnalisé :

depuis django.contrib import admin
depuis .models import Auteur, Lecteur, Éditeur
depuis myproject.admin_site import custom_admin_site

@admin.register(Auteur, Lecteur, Éditeur, site=custom_admin_site)
class PersonAdmin(admin.ModelAdmin) :
pass

Comment fonctionne l'administrateur

Lorsque 'django.contrib.admin' est ajouté à INSTALLED_APPS, django trouvera automatiquement le module admin.py dans chaque application et l'importera.

class apps.AdminConfig
Django 1.7 nouveau.
La classe AppConfig par défaut de l'administrateur Autodiscover() sera exécutée au démarrage de Django.

class apps.SimpleAdminConfig
Nouveau dans Django 1.7.
Similaire à AdminConfig, il n'exécutera pas autodiscover().

autodiscover()
importer l'administrateur de chaque module d'application .py.

Modifications de Django 1.7 :
Dans les versions précédentes, vous deviez démarrer manuellement cette méthode dans urls.py pour trouver l'admin.py de chaque application. Après la 1.7, AdminConfig exécutera automatiquement cette méthode.

Si vous utilisez un AdminSite personnalisé, vous devez charger les sous-classes de ModelAdmin dans votre propre code et les enregistrer toutes dans l'AdminSite personnalisé. Dans ce cas, vous devez arrêter la découverte automatique () et vous pouvez remplacer « django.contrib.admin » dans INSTALLED_APPS par « django.contrib.admin.apps.SimpleAdminConfig ».

Options ModelAdmin

actions

Liste des actions d'administration

actions_on_top
actions_on_bottom

L'emplacement de l'action.

date_hierarchy

Définissez date_hierarchy sur DateField ou DateTimeField du modèle pour ajouter une hiérarchie de dates à ce modèle dans l'administrateur.

fields

exclude

détermine quels champs sont affichés dans le formulaire du modèle. les champs incluent, excluent exclus.

de django.contrib import admin

class AuthorAdmin(admin.ModelAdmin):
fields = ('name', 'title')

class AuthorAdmin(admin .ModelAdmin):
exclus = ('birth_date',)

Vous pouvez mettre certains champs sur la même ligne, comme les champs d'URL et de titre suivants sur la même ligne :

class FlatPageAdmin(admin.ModelAdmin):
fields = (('url', 'title'), 'content')

fieldsets

fieldsets est un double tuple ( name, field_options), les champs peuvent être divisés en blocs :

from django.contrib import admin

class FlatPageAdmin(admin.ModelAdmin):
fieldsets = (
(Aucun) , {
                                                                                                                                                                                                                 ',), 'champs' : ('enable_comments', 'registration_required', 'template_name')
}),
)

name est le titre du bloc et field_options est un dictionnaire. Les clés de

field_options sont les suivantes :

fields

Un tuple de noms de champs, affichés dans l'ensemble de champs

{
'fields' : (('first_name', 'last_name'), 'address', 'city', 'state'),
}

classes

Extra fourni à la liste des champs de classes CSS.

description

Texte supplémentaire pouvant être affiché en haut de l'ensemble de champs.

filter_horizontal
filter_vertical

Lorsque le modèle a un champ ManyToManyField, utilisez filter_horizontal, et filter_vertical peut être sélectionné parmi les options existantes. L’un est horizontal et l’autre vertical.

formulaire

Le formulaire utilisé.

à partir des formulaires d'importation Django
à partir de Django.contrib import admin
à partir de myapp.models import Person

class PersonForm(forms.ModelForm):

class Meta :
modèle = Personne
exclure = ['nom']

class PersonAdmin(admin.ModelAdmin):
exclure = ['âge']
formulaire = PersonneForm

Lorsqu'un conflit survient, ModelAdmin a la priorité. Dans l'exemple ci-dessus, l'âge sera exclu, mais le nom sera affiché sur la page.

formfield_overrides

Vous pouvez remplacer les options de certains champs dans l'interface du formulaire modèle et ajouter vos propres composants personnalisés pour certains types de champs spécifiques

Par exemple, vous souhaitez ajoutez le champ TextField de votre propre modèle Utilisez un éditeur de texte enrichi :

depuis django.db import models
depuis django.contrib import admin

# Importez notre widget personnalisé et notre modèle d'où ils 'sont définis
depuis myapp.widgets import RichTextEditorWidget
from myapp.models import MyModel

class MyModelAdmin(admin.ModelAdmin):
formfield_overrides = {
models.TextField : {' widget' : RichTextEditorWidget},
}

list_display

Champs pouvant être affichés sur la page de liste des modifications du modèle. Si list_display n'est pas défini, l'interface d'administration s'affichera automatiquement. les résultats __unicode__() du modèle.

Il y a 4 valeurs dans list_display :

Un champ de modèle

list_display = ('first_name', 'last_name')

Une fonction appelable avec le modèle comme paramètre

def upper_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,) 

Un attribut de ModelAdmin, similaire à une fonction appelable

class PersonAdmin(admin.ModelAdmin):
list_display = ('upper_case_name',)

def upper_case_name(self, obj):
return ("%s %s" % ( obj.first_name, obj.last_name)).upper()
upper_case_name.short_description = 'Name'

Un attribut de Model, similaire à la fonction appelable

de Django .db importer des modèles
de django.contrib import admin

class Person(models.Model):
nom = models.CharField(max_length=50)
anniversaire = models.DateField( )

def décennie_born_in(self):
return self.birthday.strftime('%Y')(:3] "0's"
décennie_born_in.short_description = 'Décade de naissance'

class PersonAdmin(admin.ModelAdmin):
list_display = ('name', 'decade_born_in')

Remarque :

Si le champ est ForeignKey, la clé étrangère sera être affiché __unicode__.

ManyToManyField n'est pas pris en charge

S'il s'agit d'un BooleanField, on ou off sera affiché.

Si la chaîne fournie est une méthode de Model ou ModelAdmin ou une fonction appelable, Django échappera automatiquement la sortie HTML. Si vous ne souhaitez pas vous échapper, vous pouvez définir les allow_tags de la méthode sur True. Afin d'éviter les attaques cross-site XSS, vous devez utiliser format_html pour échapper à la saisie de l'utilisateur :

depuis django.db import models
depuis django.contrib import admin
depuis 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 colour_name(self):
return format_html( '{1} {2}',
                                                                                                                                                     self.last_name )

coloured _name.allow_tags = True

class PersonAdmin(admin.ModelAdmin):
list_display = ('first_name', 'last_name', 'colored_name') 


Si la chaîne fournie est une méthode de modèle ou ModelAdmin ou une fonction appelable et renvoie True ou False, vous pouvez définir l'attribut booléen de la méthode sur True. De cette façon, l'icône d'activation ou de désactivation sera affichée sur la page.

depuis django.db import models

depuis django.contrib import admin


class Person(models.Model):
first_name = models.CharField(max_length=50)
anniversaire = 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') 


La méthode __str__ ou __unicode__ du modèle est également Vous pouvez utiliser

list_display = ('__str__', 'some_other_field')


Si les éléments de list_display ne sont pas des champs réels de la base de données, vous ne pouvez pas trier selon cet élément. Sinon, vous pouvez commander par cet article et vous pouvez l'indiquer en définissant l'attribut admin_order_field.

depuis django.db import models

depuis django.contrib import admin

depuis django.utils.html import format_html

class Person(models.Model):
first_name = models.CharField(max_length=50)
color_code = models.CharField(max_length=6)

def coloured_first_name(self):
return format_html('{1}',
                                                                                    _tags = True
coloré _first_name.admin_order_field = 'first_name'

class PersonAdmin(admin.ModelAdmin):
list_display = ('first_name', 'colored_first_name')


Lorsque vous essayez de trier par coloured_first_name, Django triera par first_name Tri. Peut être trié à l'envers :

colored_first_name.admin_order_field = '-first_name'

Les éléments de list_display peuvent également être des attributs :

class Person(object):
first_name = models.CharField(max_length=50)

last_name = models.CharField(max_length=50)

def my_property(self):

return self.first_name ' ' self.last_name
my_property.short_description = "Nom complet de la personne"

full_name = property(my_property)

class PersonAdmin(admin.ModelAdmin):
list_display = ('full_name',)


list_display_link

Les champs seront liés à la page de changement de mode

class PersonAdmin(admin.ModelAdmin):

list_display = ('first_name' , 'last_name', 'birthday')

list_display_links = ('first_name', 'last_name')

list_editable

Les champs peuvent être modifiés sur la page de liste de modifications de. Les champs qu'il contient doivent également être dans list_display.

list_filter

Les champs qu'il contient peuvent être utilisés comme filtres pour filtrer le modèle. Peut être un domaine connexe.

class PersonAdmin(admin.UserAdmin):

list_filter = ('company__name',)

list_max_show_all


afficher tout Le nombre de modèles sur la page , il manque Save 200.

list_per_page

Le nombre de modèles dans chaque page de liste de modifications, par défaut 100.

list_select_rated

est lié à select_rated().

commander

Commander. Paginateur utilisé par

paginateur

. Par défaut django.core.paginator.Paginator.

prepopulated_fields

Champs pré-remplis.

champs_radio

Utilisez le bouton radio au lieu de la case de sélection (ForeignKey ou lorsqu'il y a une option de choix).

class PersonAdmin(admin.ModelAdmin):
radio_fields = {"group": admin.VERTICAL}

raw_id_fields

affichera les identifiants des field , utilisé pour ForeignKey ou ManyToManyField.

class ArticleAdmin(admin.ModelAdmin):
raw_id_fields = ("newspaper")

readonly_fields

Uniquement les champs lisibles et non modifiables. Il peut également s'agir d'une méthode :

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, instance):
# en supposant que get_full_address() renvoie une liste de chaînes
# pour chaque ligne de l'adresse et que vous souhaitez séparer chaque
        # ligne par un saut de ligne
      return format_html_join(
            mark_safe('
'),
                               ((( ligne,) pour la ligne entrante instance.get_full_address()),
) ou "Je ne parviens pas à déterminer cette adresse."

# short_description fonctionne comme un champ de modèle verbose_name
address_report.short_description = "Address"
# dans cet exemple, nous avons utilisé des balises HTML dans la sortie
address_report.allow_tags = True

When save_as

est défini sur True, le bouton "Enregistrer et ajouter un autre" sur la page de modification sera remplacé par "Enregistrer sous". Lorsque

save_on_top

est défini sur True, il y aura également un bouton de sauvegarde en haut de la page de modification.

search_fields

Champs consultables.

view_on_site

S'il faut afficher le lien Afficher sur site.

Options du modèle

Certaines options utilisées pour spécifier le modèle lors de la personnalisation du modèle d'administration.

add_form_template

Le modèle utilisé par add_view().

change_form_template

Le modèle utilisé par change_view().

change_list_template

Le modèle utilisé par changelist_view() .

delete_confirmation_template

Le modèle utilisé par delete_view().

delete_selected_confirmation_template

Le modèle utilisé par la méthode d'action delete_selected.

ModelAdmin.object_history_template

Modèle et journal utilisés par history_view().

Ce qui précède est le contenu de Djangoadminsite (1) ModelAdminOptions Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !



Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn