Menu
CoddyTech

Una nota ha un proprietario

Fa parte della sezione Utenti e account del percorso Django di Coddy. Lezione 8 di 16.

Tutti gli utenti autenticati condividono un unico gruppo di note. Per distinguerle, ogni nota deve registrare chi l’ha scritta: una ForeignKey, come quella che collega un libro al suo autore.

Per collegarsi a un utente, non importare User. Imposta la ForeignKey sul valore settings.AUTH_USER_MODEL (dopo from django.conf import settings), che specifica il modello utente, qui "auth.User". In questo modo, il codice continua a funzionare anche in un progetto con un proprio modello utente.

Chi ha scritto una nota non è mai un campo del modulo: un utente che potesse sceglierlo potrebbe scrivere a nome di qualcun altro. Lo imposta la vista. Come nella sezione Forms, form.save(commit=False) crea l’oggetto senza salvarlo, così la vista può impostare un campo che il modulo non ha:

order = form.save(commit=False)
order.total = order.quantity * order.unit_price
order.save()

Esegui makemigrations e migrate per il nuovo campo.

challenge icon

Sfida

Medio

Assegna un proprietario a ogni nota.

  1. In notes/models.py, aggiungi un campo owner a Note: una ForeignKey a settings.AUTH_USER_MODEL con on_delete=models.CASCADE e related_name="notes". Importa settings da django.conf.
  2. In note_create (views.py), sostituisci note = form.save(). Crea la nota senza salvarla, imposta come proprietario l’utente che ha effettuato l’accesso, quindi salvala.

Scrivi una nota come ada, poi apri la scheda Data: il suo proprietario è 1.

Provalo tu

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

Tutte le lezioni di Utenti e account

Esercitati da solo: Playground Django