我现在有两个 serach 字段(计划添加更多),我只想使用原始 sql whem 过滤对象(我知道 Django 提供 ORM 这让生活变得更加轻松,但是在我现在的工作中我需要使用 SQL ) 我知道如何在 Django 中使用 ORM,如下所示:
def my_view(request):
value_one = request.GET.get("value_one", None)
value_two = request.GET.get("value_two", None)
value_three = request.GET.get("value_three", None)
objects = MyModel.objects.all()
if value_one:
objects = objects.filter(field_one=value_one)
if value_two:
objects = objects.filter(field_two=value_two)
if value_three:
objects = objects.filter(field_three=value_three)
但是有没有办法使用 SQL 来代替过滤呢?
def profile(request):
cursor = connection.cursor()
value_one = request.GET.get("searchage", None)
value_two = request.GET.get("search", None)
objects= cursor.execute('SELECT * from People p JOIN Jobs j on p.JobId = j.Id ')
objects = dictfetchall(cursor)
if value_one:
objects = cursor.execute('SELECT * from People p JOIN Jobs j on p.JobId = j.Id WHERE p.Age = %s',[value_one] )
if value_two:
objects = ???
return render(request,'personal.html', {'value1':value_one, 'value2':value_two, 'objects':objects})
我只有一个想法,那就是有这样的 if 子句
if value_one and value_two:
..
elif value_one and !value_two:
...
elif !value_one and value_two:
但是,如果我有超过 2 个搜索字段,那么编写每个子句就会变得困难且耗时。没有 Django ORM 还有其他出路吗?