Solo le mie note
Fa parte della sezione Utenti e account del percorso Django di Coddy. Lezione 9 di 16.
Ogni nota ha un proprietario, ma l’elenco mostra ancora Note.objects.all(): ada legge il diario di bob. L’elenco dovrebbe mostrare solo le note di chi le sta visualizzando.
Filtri una ForeignKey usando un oggetto, non un nome. Il sito di una biblioteca elenca i libri di un autore:
author = Author.objects.get(name="Ursula K. Le Guin")
books = Book.objects.filter(author=author)Django confronta l’id dell’autore. Passare il nome, filter(author="Ursula K. Le Guin"), genera un ValueError. Per confrontare il nome dell’autore, aggiungi due caratteri di sottolineatura alla chiave: filter(author__name="Ursula K. Le Guin").
In questo caso, l’oggetto da usare per il confronto è il visitatore, quindi non c’è nessuno da cercare. Django inserisce già l’utente che ha effettuato l’accesso in ogni richiesta. Non prendere mai l’utente dall’URL o da un campo del modulo, perché chiunque può modificarli.
Sfida
FacileIn note_list, elenca solo le note dell'utente che ha effettuato l'accesso.
Accedi come ada (password coddy-pass-123): l'elenco mostra Shopping list e Ideas, non Bob's diary.
Provalo tu
from django.contrib.auth import login
from django.contrib.auth.decorators import login_not_required
from django.contrib.auth.forms import UserCreationForm
from django.shortcuts import get_object_or_404, redirect, render
from .forms import NoteForm
from .models import Note
def note_list(request):
notes = Note.objects.all()
return render(request, "notes/note_list.html", {"notes": notes})
def note_detail(request, pk):
note = get_object_or_404(Note, pk=pk)
return render(request, "notes/note_detail.html", {"note": note})
def note_create(request):
if request.method == "POST":
form = NoteForm(request.POST)
if form.is_valid():
note = form.save(commit=False)
note.owner = request.user
note.save()
return redirect("notes:detail", pk=note.pk)
else:
form = NoteForm()
return render(request, "notes/note_form.html", {"form": form})
def note_edit(request, pk):
note = get_object_or_404(Note, pk=pk)
if request.method == "POST":
form = NoteForm(request.POST, instance=note)
if form.is_valid():
form.save()
return redirect("notes:detail", pk=note.pk)
else:
form = NoteForm(instance=note)
return render(request, "notes/note_form.html", {"form": form, "note": note})
def note_delete(request, pk):
note = get_object_or_404(Note, pk=pk)
if request.method == "POST":
note.delete()
return redirect("notes:list")
return render(request, "notes/note_confirm_delete.html", {"note": note})
@login_not_required
def signup(request):
if request.method == "POST":
form = UserCreationForm(request.POST)
if form.is_valid():
user = form.save()
login(request, user)
return redirect("notes:list")
else:
form = UserCreationForm()
return render(request, "notes/signup.html", {"form": form})
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Utenti e account
3I tuoi dati
Una nota ha un proprietarioSolo le mie noteEsercitati da solo: Playground Django