Hallo, ich habe eine Sitzungsteilnahme-Schaltfläche, die den Benutzer der Sitzung hinzufügt, wenn er darauf klickt. Ich habe es funktioniert, aber ich möchte eine Überprüfung hinzufügen, um zu sehen, ob sich der Benutzer bereits im ManyToMany-Teilnehmerfeld befindet, bevor ich ihn hinzufüge. Wie würde ich das anstellen?
Hier meine Ansicht dazu
def attend_session(request):
session = Study.objects.get(pk=request.POST['session_id'])
stud = Student.objects.get(student_user=request.user)
if request.method == "POST":
# Add check here to see if student is already attending
session.attendees.add(stud)
session.save()
return HttpResponseRedirect(reverse('study:sessions'))
Lösung des Problems
Sie können überprüfen mit:
from django.shortcuts import get_object_or_404, redirect
def attend_session(request):
session = get_object_or_404(Study, pk=request.POST['session_id'])
stud = get_object_or_404(Student, student_user=request.user)
if request.method == 'POST':
if stud not in session.attendees.all():
session.attendees.add(stud)
return redirect('study:sessions')
Hinweis: Es ist oft besser, [Django-doc] zu verwenden, als [Django-doc] direkt zu verwenden. Falls das Objekt nicht existiert, beispielsweise weil der Benutzer die URL selbst geändert hat, führt dies zur Rückgabe einer HTTP 404 Not Found- Antwort, während die Verwendung
zu einem HTTP 500-Serverfehler führt.get_object_or_404(…)
.get(…)
get_object_or_404(…)
.get(…)
Hinweis: Sie können [Django-doc] verwenden, anstatt zuerst [Django] aufzurufen und es dann in ein Objekt [Django-doc] einzuschließen. Die Funktion bietet dafür nicht nur eine bequemere Signatur, sondern verwendet beispielsweise auch die
Methode [Django-doc]
, wenn Sie ihr ein Modellobjekt übergeben.redirect(…)
reverse(…)
HttpResponseRedirect
redirect(…)
.get_absolute_url()
Keine Kommentare:
Kommentar veröffentlichen