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 adapté à un projet qui possède son propre modèle utilisateur.

L’auteur d’une note n’est jamais un champ de formulaire : un utilisateur qui pourrait le choisir pourrait écrire au nom de quelqu’un d’autre. La vue le renseigne. form.save(commit=False) crée l’objet sans l’enregistrer, afin que la vue puisse définir un champ que le formulaire ne possède pas :

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
  • Note reçoit un champ owner qui est associé à un utilisateur. La suppression d’un utilisateur supprime ses notes, et user.notes.all() liste les notes d’un utilisateur.
  • Une nouvelle note appartient à l’utilisateur connecté qui l’a écrite. Le formulaire conserve uniquement title et body.

Clique sur Run, connecte-toi en tant que ada (mot de passe coddy-pass-123), écris une note et ouvre l’onglet Data.

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