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.
Desafío
IntermedioAsigna un propietario a cada nota.
- En
notes/models.py, añade un campoowneraNote: unaForeignKeyasettings.AUTH_USER_MODELconon_delete=models.CASCADEyrelated_name="notes". Importasettingsdesdedjango.conf. - En
note_create(views.py), reemplazanote = 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
3Tus propios datos
Una nota tiene un propietarioSolo mis notasPractica por tu cuenta: Playground de Django