我写了一个用已知的查找类型查询模型。表示输入类型被传递为kwargs
的标志。下面解释kwarg
查找以及传入的kwargs。使用django查询不违反DRY的重构方法?
- 数据库散列(随机没有独特的情况下,与
db_hash=True
)中的对象(“约翰”或“山姆”作为name=True
) - ID的对象的
- 名称。 (obj.ids
124
,或134
为id=True
) - 的情况下(OBJ文件没有任何标志)
例如只为名称的方法调用会是什么样子,
self.check_all_routes("Sam", "452", name=True)
我想重构以下方法以减少它在违反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')
可以做些什么来使它不违反DRY。
只能有一个kwargs为真? –