0

Ich versuche es so zu machen, dass Benutzer nur einen Termin vereinbaren können. Hier ändere ich die Speichermethode. Ich versuche herauszufinden, ob dieser Benutzer bereits einen Termin hat.Begrenzung eines Termins pro Benutzer

In meinem views.py habe ich bereits etwas, das einen Fehler auslösen wird, wenn ein Termin mit diesem Benutzer bereits besteht. Aber ich denke, das ist nicht genug und es sollte etwas auf der Modellebene sein.

appointments = Appointment.objects.filter(owner=request.user) 
    if appointments.exists(): 
     raise PermissionDenied('You have already scheduled an appointment.') 

Antwort

1

Rather Ihrer Ansicht behandeln, als wenn diese Logik, würde ich die Datenbank Bezug auf eine OneToOneField ändern. Lassen Sie das Feld sein nullable, und daher können Sie verlassen sich auf Ihre Djangos db Modul relationale Integrität mit diesem Bereich

Wie in den Quellcode zu erhalten beschrieben:

A OneToOneField is essentially the same as a ForeignKey, with the exception 
that it always carries a "unique" constraint with it and the reverse 
relation always returns the object pointed to (since there will only ever 
be one), rather than returning a list. 
+0

Ah ja, das klingt definitiv wie der richtige Weg, es zu tun! – questnofinterest

1

Das self Objekt hat die owner Attribut auf der aktuelle Benutzer, so dass Sie self.owner verwenden können, um darauf zuzugreifen:

def save(self, *args, **kwargs): 
    if Appointment.objects.filter(owner=self.owner).exists() and not self.pk: 
    ... 
Verwandte Themen