Menu
CoddyTech

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.

challenge icon

Défi

Moyen

Attribue un propriétaire à chaque note.

  1. Dans notes/models.py, ajoute un champ owner à Note : une ForeignKey vers settings.AUTH_USER_MODEL avec on_delete=models.CASCADE et related_name="notes". Importe settings depuis django.conf.
  2. Dans note_create (views.py), remplace note = 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

Entraînez-vous par vous-même : Playground Django