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 han iniciado sesión comparten un montón de notas. Para distinguirlas, cada nota debe registrar quién la escribió: una ForeignKey, como la que conecta un libro con su autor.

Para enlazar con un usuario, no importes User. Asigna a ForeignKey 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. 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()

Ejecuta makemigrations y migrate para el nuevo campo.

challenge icon

Desafío

Intermedio
  • Note obtiene un campo owner que se vincula a un usuario. Al eliminar un usuario, se eliminan sus notas, y user.notes.all() muestra las notas de un usuario.
  • Una nota nueva pertenece al usuario que ha iniciado sesión y la ha escrito. El formulario conserva solo title y body.

Pulsa Run, inicia sesión como ada (contraseña coddy-pass-123), escribe una nota y abre la pestaña Data.

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