gwift-book/source/django/admin.adoc

3.6 KiB
Raw Blame History

Administration

Woké. On va commencer par la partie à ne surtout (surtout !!) pas faire en premier dans un projet Django. Mais on va la faire quand même. La raison principale est que cette partie est tellement puissante et performante, quelle pourrait laisser penser quil est possible de réaliser une application complète rien quen configurant ladministration.

Cest faux.

Ladministration est une sorte de tour de contrôle évoluée; elle se base sur le modèle de données programmé et construit dynamiquement les formulaires qui lui est associé. Elle joue avec les clés primaires, étrangères, les champs et types de champs par introspection.

Son problème est quelle présente une courbe dapprentissage asymptotique. Il est très facile darriver rapidement à un bon résultat, au travers dun périmètre de configuration relativement restreint. Mais quoi que vous fassiez, il y a un moment où la courbe de paramétrage sera tellement ardue que vous aurez plus facile à développer ce que vous souhaitez ajouter en utilisant les autres concepts de Django.

Elle doit rester dans les mains dadministrateurs ou de gestionnaires, et dans leurs mains à eux uniquement: il nest pas question de donner des droits aux utilisateurs finaux (même si cest extrêment tentant durant les premiers tours de roues). Indépendamment de la manière dont vous allez lutiliser et la configurer, vous finirez par devoir développer une "vraie" application, destinée aux utilisateurs classiques, et répondant à leurs besoins uniquement.

Une bonne idée consiste à développer ladministration dans un premier temps, en gardant en tête quil sera nécessaire de développer des concepts spécifiques. Dans cet objectif, ladministration est un outil exceptionel, qui permet de valider un modèle, de créer des objets rapidement et de valider les liens qui existent entre eux. Cest un excellent outil de prototypage et de preuve de concept.

Quelques conseils

  1. Surchargez la méthode str(self) pour chaque classe que vous aurez définie dans le modèle. Cela permettra de construire une représentation textuelle qui représentera linstance de votre classe. Cette information sera utilisée un peu partout dans le code, et donnera une meilleure idée de ce que lon manipule. En plus, cette méthode est également appelée lorsque ladministration historisera une action (et comme cette étape sera inaltérable, autant quelle soit fixée dans le début).

  2. La méthode get_absolute_url(self) retourne lURL à laquelle on peut accéder pour obtenir les détails dune instance. Par exemple:

def get_absolute_url(self):
    return reverse('myapp.views.details', args=[self.id])
  1. Les attributs Meta:

class Meta:
	ordering = ['-field1', 'field2']
	verbose_name = 'my class in singular'
	verbose_name_plural = 'my class when is in a list!'
  1. Le titre:

    • Soit en modifiant le template de ladministration

    • Soit en ajoutant lassignation suivante dans le fichier urls.py: admin.site.site_header = "SuperBook Secret Area.

  2. Prefetch

En gros, le problème de ladmin est que si on fait des requêtes imbriquées, on va flinguer lapplication et le chargement de la page. La solution consiste à utiliser la propriété list_select_related de la classe dAdmin, afin dappliquer une jointure par défaut et et gagner en performances.