GOOGLE ADS

Dienstag, 19. April 2022

Überprüfen, ob sich das Element im ManyToMany-Feld in Django befindet

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(…) HttpResponseRedirectredirect(…).get_absolute_url()

Keine Kommentare:

Kommentar veröffentlichen

Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...