Mehrere Änderungen, ein Ergebnis · Übung
Das Ausleihlimit eines Mitglieds beachten
Sam beginnt mit einem aktiven Ausleihvorgang und einem gespeicherten Limit von 2.5. Die aktuelle Funktion schützt jeden Gegenstand, lässt Sam aber sowohl Gegenstand 4 als auch Gegenstand 5 hinzufügen. Dadurch entstehen drei aktive Ausleihvorgänge.
Die Entscheidung betrifft den nächsten ganzen Ausleihvorgang:
| Jetzt aktiv | Gespeichertes Limit | Nächste Anzahl | Erlauben? |
|---|---|---|---|
1 | 2.5 | 2 | Ja |
2 | 2.5 | 3 | Nein |
Öffne transactions.py. Die Abfragen für das Mitglied und die aktive Anzahl sind vorgegeben. Hole innerhalb desselben Verbindungskontexts nach der Gegenstandsprüfung und vor der Einfügung die Mitgliederzeile mit (member_id,) ab.
Wenn das Mitglied existiert, zähle nur dessen Ausleihvorgänge mit fehlendem Wert für returned_on. Lehne die Einfügung ab, wenn:
active_count + 1 > loan_limit
Löse die exakte Meldung aus:
raise ValueError("That member has reached the loan limit.")
Runde loan_limit nicht. Jede Ausleihe fügt einen ganzen Ausleihvorgang hinzu, und der direkte Vergleich liefert die dokumentierte Grenze: 2 <= 2.5 ist wahr, während 3 <= 2.5 falsch ist. Zurückgegebene Ausleihvorgänge zählen nicht.
Wenn die Mitgliedersuche None zurückgibt, überspringe diese Anwendungsprüfung. Die spätere Einfügung erreicht die Fremdschlüsselregel und löst sqlite3.IntegrityError aus. So bleibt das Verhalten erhalten, das aufrufender Code bei einem fehlenden übergeordneten Datensatz bereits kennt.
Klicke auf Run. Der Aufruf für den aktiven Gegenstand bleibt unverändert. Sams erster Aufruf für einen verfügbaren Gegenstand gibt 8101 zurück. Der zweite sollte jetzt Folgendes zeigen:
ValueError: That member has reached the loan limit.
Reopened active loans for MB-028: 2
Submit prüft eine leere Anzahl, einen verbleibenden Platz, ein exakt ausgeschöpftes Mitgliedslimit, zurückgegebenen Verlauf und die Grenze 2.5. Außerdem prüft es, dass die Anzahlen nur zum vorgeschlagenen Mitglied gehören, erfolgreiche Arbeit dauerhaft gespeichert wird, fehlende übergeordnete Datensätze Integritätsfehler bleiben und die ursprüngliche Verbindung verwendbar bleibt.
Eine Ausleihe trägt jetzt beide Anwendungsregeln in einer Transaktion. Du bist bereit, dieselben Prüfungen auf jede Zeile eines vorgeschlagenen Sets anzuwenden.
Aufgabe
Erweitere checkout_loan innerhalb seines bestehenden Verbindungskontexts um die Prüfung des Mitgliedslimits.
Hole das loan_limit des Mitglieds ab, zähle nur dessen aktive Ausleihvorgänge und erlaube die Einfügung genau dann, wenn active_count + 1 <= loan_limit gilt. Löse bei ausgeschöpftem Limit ValueError("That member has reached the loan limit.") aus. Ein fehlendes Mitglied muss weiterhin den Fremdschlüssel-IntegrityError erreichen.