Menu
CoddyTech

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 autenticados compartilham um conjunto 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 (após from django.conf import settings), que identifica o modelo de usuário — "auth.User" neste caso. Assim, o código continua funcionando em um projeto com seu próprio modelo de usuário.

Quem escreveu uma nota nunca é um campo do formulário: um usuário que pudesse escolhê-lo poderia escrever como outra pessoa. A view preenche esse campo. 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.

challenge icon

Desafio

Médio
  • Note recebe um campo owner que está vinculado a um usuário. Excluir um usuário exclui suas notas, e user.notes.all() lista as notas de um usuário.
  • Uma nova nota pertence ao usuário conectado que a escreveu. O formulário mantém apenas title e body.

Pressione Run, faça login como ada (senha coddy-pass-123), escreva uma nota e abra a aba Data.

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

Pratique por conta própria: Playground de Django