Menu
CoddyTech

Una nota tiene un propietario

Parte de la sección Usuarios y cuentas del Journey de Django de Coddy. Lección 8 de 16.

Todos los usuarios que hayan iniciado sesión comparten una pila de notas. Para distinguirlas, cada nota debe registrar quién la escribió: una ForeignKey, como la que va de un libro a su autor.

Para vincularla a un usuario, no importes User. Dirige la ForeignKey a la configuración settings.AUTH_USER_MODEL (después de from django.conf import settings), que indica el modelo de usuario; aquí, "auth.User". Así, el código sigue funcionando en un proyecto con su propio modelo de usuario.

Quién escribió una nota nunca es un campo del formulario: un usuario que pudiera elegirlo podría escribir como otra persona. La vista lo completa. Como en la sección Formularios, form.save(commit=False) crea el objeto sin guardarlo, para que la vista pueda establecer un campo que el formulario no tiene:

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

Al ejecutar, se aplican makemigrations y migrate para el nuevo campo.

challenge icon

Desafío

Intermedio

Asigna un propietario a cada nota.

  1. En notes/models.py, añade un campo owner a Note: una ForeignKey a settings.AUTH_USER_MODEL con on_delete=models.CASCADE y related_name="notes". Importa settings desde django.conf.
  2. En note_create (views.py), reemplaza note = form.save(). Crea la nota sin guardarla, asigna como propietario al usuario que inició sesión y, después, guárdala.

Escribe una nota como ada y luego abre la pestaña Datos: su propietario es 1.

Pruébalo tú mismo

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

Todas las lecciones de Usuarios y cuentas

Practica por tu cuenta: Playground de Django