Ich habe ein Django-Modell, das einen Fremdschlüssel hat, der optional ist. Ich habe es so eingerichtet, dass die Tabelle die Standardoptionen verschiedener service_types
enthält, aber man könnte diese Option überschreiben, indem man einen controller
Fremdschlüssel angibt.Django Model Manager für Standardoptionen
Jetzt in meinen Ansichten habe ich eine Reihe von Code, der wie folgt aussieht: zu tun Manager
sollte die Art und Weise
try:
modeService = RegressionServices.objects.get(controller=controller, service_type=SERVICE_TYPE_CONTROLLER_MODE)
except RegressionServices.DoesNotExist:
modeService = RegressionServices.objects.get(service_type=SERVICE_TYPE_CONTROLLER_MODE)
Ich mag diese reduzieren bis auf einen Anruf, und ich denke, dass ein Django-Modell damit. Im Wesentlichen würde es für den Controller in **kwargs
überprüfen und wenn vorhanden würde es grundsätzlich den obigen Code tun. Ich suche in den Dokumenten und finde nur, dass die -Methode normalerweise außer Kraft gesetzt wird. Ist es in Ordnung, die get()
Methode zu überschreiben? Habe ich sogar Zugriff auf das Modell RegressionServices
in einem Model Manager get()
Methode?
Kann mir jemand einen anderen Weg als einen Modellmanager einfallen lassen?
Wenn '' RegressionServices'' zwei Einträge mit demselben Diensttyp hat (was auch der Fall ist), eins mit einem Controller FK und eins ohne, wird eine '' MultipleObjectsReturned'' Ausnahme ausgelöst, so dass dies nicht funktioniert. – Randy
Wenn mehrere Objekte zurückgegeben werden können, verwenden Sie entweder nicht "get" oder fangen Sie die Ausnahme ab und reagieren Sie entsprechend. In Ihrem Fall sollten Sie 'filter' mit Subscript-Syntax verwenden, um ein Limit (z. B.' RegressionServices.objects.filter (...) [0] ') festzulegen und' IndexError' einzufangen, um sicherzustellen, dass mindestens ein Element zurückgegeben wurde . –