Is there a downside to using ".filter().filter().filter()..." in Django?
Update:
Disregard this answer. See this better, correct answer. Thanks @Sam for the heads up.
Old Answer:
Are the following two calls resolved to the equivalent SQL query in Django?
Short answer: yes. They will generate equivalent queries.
I verified this with a model I am using. the queries produced are functionally identical. The different filter
conditions are AND
ed together in the query.
I'd like code to be readable (there are MANY more filter calls than I've shown), but only if there's no sacrifice to performance.
One way to achieve readability is to use a dictionary for collecting all filter conditions. For e.g.
conditions = dict(arg1 = foo, arg2 = bar, ....)
conditions.update(argN = baz)
Model.objects.filter(**conditions)
In addition to Manoj's answer, here's how you can analyze the sql generated for a QuerySet
object:
result1 = SomeModel.objects.filter(field1=100, field2=200)
print "Result1", results1.query
result2 = SomeModel.objects.filter(field1=100).filter(field2=200)
print "Result2", result2.query