2012-04-09 12 views
0

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?

Antwort

0

Führen Sie einfach ein logisches ODER mit Q objects aus.

+0

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

+0

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 . –

Verwandte Themen