我写了一个查询具有已知查找类型的模型.表示输入类型传递的标志kwargs.下面kwarg将解释查找以及传递的kwargs.
db_hash=True)name=True)124,或134as id=True)例如,只是为了方法调用的名称,
self.check_all_routes("Sam", "452", name=True)
Run Code Online (Sandbox Code Playgroud)
我想重构下面的方法来减少它在违反DRY时产生的混乱.
def check_all_routes(self, driver, route, **kwargs):
_hash = kwargs.get('db_hash')
_name = kwargs.get('name')
_id = kwargs.get('id')
if _hash:
return self.model.objects.filter(
driver__db_hash=driver,
route__db_hash=route
).prefetch_related().select_related().values_list('route_number')
if _name:
return self.model.objects.filter(
driver__name=driver,
route__name=route
).prefetch_related().select_related().values_list('route_number')
if _id:
return self.model.objects.filter(
driver_id=driver,
route_id=route
).prefetch_related().select_related().values_list('route_number')
return self.model.objects.filter(
driver=driver,
route=route
).prefetch_related().select_related().values_list('route_number')
Run Code Online (Sandbox Code Playgroud)
可以做些什么来使它不违反DRY.