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 che hanno effettuato l'accesso condividono un unico mucchio 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. Indica come riferimento della ForeignKey l'impostazione settings.AUTH_USER_MODEL (dopo from django.conf import settings), che specifica il modello utente, qui "auth.User". In questo modo, il codice funziona anche in un progetto con un modello utente personalizzato.

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

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
  • Note ottiene un campo owner che collega a un utente. Eliminando un utente si eliminano le sue note e user.notes.all() elenca le note dell'utente.
  • Una nuova nota appartiene all'utente che ha effettuato l'accesso e l'ha scritta. Il modulo include solo title e body.

Premi Esegui, accedi come ada (password coddy-pass-123), scrivi una nota e apri la scheda Dati.

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