У меня проблема с более эффективным поиском, я сделал код по-разному и не убедил меня. Я пытаюсь найти сотрудника с тремя фильтрами, именем, фамилией и отделом, где он работает.Python, SqlAlchemy. Как сделать более эффективный поиск?
код в представлении выглядит следующим образом:
if form.nombre.data == u'' and form.apellido.data == u'' and form.departamento.data != u'':
empleados = db.session.query(Empleado).filter_by(departamento_id=form.departamento.data).all()
elif form.nombre.data == u'' and form.apellido.data != u'' and form.departamento.data == u'':
empleados = db.session.query(Empleado).filter_by(apellido=form.apellido.data.lower()).all()
elif form.nombre.data == u'' and form.apellido.data != u'' and form.departamento.data != u'':
empleados = db.session.query(Empleado).filter_by(apellido=form.apellido.data.lower(),
departamento_id=form.departamento.data).all()
elif form.nombre.data != u'' and form.apellido.data == u'' and form.departamento.data == u'':
empleados = db.session.query(Empleado).filter_by(nombre=form.nombre.data.lower()).all()
elif form.nombre.data != u'' and form.apellido.data == u'' and form.departamento.data != u'':
empleados = db.session.query(Empleado).filter_by(nombre=form.nombre.data.lower(),
departamento_id=form.departamento.data).all()
elif form.nombre.data != u'' and form.apellido.data != u'' and form.departamento.data == u'':
empleados = db.session.query(Empleado).filter_by(nombre=form.nombre.data.lower(), apellido=form.apellido.data.lower()).all()
elif form.nombre.data != u'' and form.apellido.data != u'' and form.departamento.data != u'':
empleados = db.session.query(Empleado).filter_by(nombre= form.nombre.data.lower(), apellido=form.apellido.data.lower(), departamento_id=form.departamento.data).all()
else:
empleados = db.session.query(Empleado).all()
Как вы можете видеть, что это ужасный код. если бы вы добавили фильтр, это было бы комбинацией из 16 операторов, если не говоря уже о двух других.
Любой тип ответа приветствуется. Спасибо
Благодарим за помощь. : D –