Une note a un propriétaire
Fait partie de la section Utilisateurs et comptes du Journey Django de Coddy. Leçon 8 sur 16.
Tous les utilisateurs connectés partagent un même tas de notes. Pour les distinguer, chaque note doit indiquer qui l’a écrite : une ForeignKey, comme celle qui relie un livre à son auteur.
Pour établir un lien vers un utilisateur, n’importez pas User. Faites pointer la ForeignKey vers le paramètre settings.AUTH_USER_MODEL (après from django.conf import settings), qui désigne le modèle utilisateur, ici "auth.User". Le code reste ainsi compatible avec un projet qui possède son propre modèle utilisateur.
L’auteur d’une note ne doit jamais être un champ de formulaire : un utilisateur qui pourrait le choisir pourrait écrire en se faisant passer pour quelqu’un d’autre. La vue le renseigne. Comme dans la section sur les formulaires, form.save(commit=False) construit l’objet sans l’enregistrer, afin que la vue puisse définir un champ qui ne figure pas dans le formulaire :
order = form.save(commit=False)
order.total = order.quantity * order.unit_price
order.save()Exécutez makemigrations et migrate pour le nouveau champ.
Défi
MoyenAttribue un propriétaire à chaque note.
- Dans
notes/models.py, ajoute un champowneràNote: uneForeignKeyverssettings.AUTH_USER_MODELavecon_delete=models.CASCADEetrelated_name="notes". Importesettingsdepuisdjango.conf. - Dans
note_create(views.py), remplacenote = form.save(). Crée la note sans l’enregistrer, attribue-lui comme propriétaire l’utilisateur connecté, puis enregistre-la.
Rédige une note en tant que ada, puis ouvre l’onglet Données : son propriétaire est 1.
Essayez vous-même
from django.db import models
class Note(models.Model):
title = models.CharField(max_length=100)
body = models.TextField(blank=True)
created = models.DateTimeField(auto_now_add=True)
class Meta:
ordering = ["-created"]
def __str__(self):
return self.title
Toutes les leçons de Utilisateurs et comptes
3Vos propres données
Une note a un propriétaireUniquement mes notesEntraînez-vous par vous-même : Playground Django