Uma nota tem um proprietário
Parte da seção Usuários e contas do Journey de Django da Coddy. Lição 8 de 16.
Todos os usuários que fizeram login compartilham uma pilha de notas. Para diferenciá-los, cada nota precisa registrar quem a escreveu: uma ForeignKey, como a que liga um livro ao seu autor.
Para vincular a um usuário, não importe User. Aponte a ForeignKey para a configuração settings.AUTH_USER_MODEL (depois de from django.conf import settings), que indica o modelo de usuário; neste caso, "auth.User". Assim, o código continua funcionando em um projeto com seu próprio modelo de usuário.
Quem escreveu uma nota nunca é um campo de formulário: um usuário que pudesse escolhê-lo poderia escrever como outra pessoa. A view preenche esse campo. Assim como na seção Formulários, form.save(commit=False) cria o objeto sem salvá-lo, para que a view possa definir um campo que o formulário não tem:
order = form.save(commit=False)
order.total = order.quantity * order.unit_price
order.save()Execute makemigrations e migrate para o novo campo.
Desafio
MédioAtribua um proprietário a cada anotação.
- Em
notes/models.py, adicione um campoowneraNote: umaForeignKeyparasettings.AUTH_USER_MODELcomon_delete=models.CASCADEerelated_name="notes". Importesettingsdedjango.conf. - Em
note_create(views.py), substituanote = form.save(). Crie a anotação sem salvá-la, defina o usuário conectado como proprietário e, em seguida, salve-a.
Escreva uma anotação como ada e, em seguida, abra a aba Dados: o proprietário dela é 1.
Experimente você mesmo
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 as lições de Usuários e contas
3Seus próprios dados
Uma nota tem um proprietárioSomente minhas notasPratique por conta própria: Playground de Django