2012-04-09 18 views
0

私は任意の外部キーを持つDjangoモデルを持っています。このようにテーブルを設定すると、テーブルにはデフォルトの別のservice_typesというオプションが含まれますが、controllerの外部キーを指定することでこのオプションをオーバーライドできます。デフォルトオプションのDjangoモデルマネージャ

私の意見では今

私はこのようなコードの束を持っている:

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) 

私は1つのコールにこれをダウン削減したいと私はDjangoのモデルManagerを行う方法であるべきだと思いますそう。本質的にはコントローラが**kwargsであるかどうかをチェックし、存在する場合は基本的に上記のコードを実行します。私はドキュメントを見て、get_query_setメソッドが通常はオーバーライドされていることを確認しています。 get()メソッドをオーバーライドすることはできますか?モデルマネージャget()の方法でRegressionServicesモデルにアクセスすることはできますか?

誰かがモデルマネージャ以外の方法を考えることができますか?

答えて

0

Q objectsを使用して論理ORを実行してください。

+0

'' RegressionServices''に、コントローラFKと1つではなく、 '' MultipleObjectsReturned''例外がスローされるので、動作しない同じサービスタイプの2つのエントリがあります。 – Randy

+0

複数のオブジェクトが返される可能性がある場合は、 'get'を使用したり例外をキャッチしたりしないでください。あなたのケースでは、少なくとも1つの項目が返されたことを保証するために、おそらく制限を課すために添字構文を持つ 'filter'を使うべきです(例えば、' RegressionServices.objects.filter(...)[0] ') 。 –

関連する問題