Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can I remove ORDER BY from a Django ORM query?

Tags:

It seems like Django by default adds ORDER BY to queries. Can I clear it?

from slowstagram.models import InstagramMedia print InstagramMedia.objects.filter().query 
SELECT   `slowstagram_instagrammedia`.`id`,   `slowstagram_instagrammedia`.`user_id`,    `slowstagram_instagrammedia`.`image_url`,   `slowstagram_instagrammedia`.`video_url`,     `slowstagram_instagrammedia`.`created_time`,     `slowstagram_instagrammedia`.`caption`,    `slowstagram_instagrammedia`.`filter`,    `slowstagram_instagrammedia`.`link`,    `slowstagram_instagrammedia`.`attribution_id`,    `slowstagram_instagrammedia`.`likes_count`,    `slowstagram_instagrammedia`.`type` FROM   `slowstagram_instagrammedia` ORDER BY   `slowstagram_instagrammedia`.`id` ASC 

```

like image 492
Kit Sunde Avatar asked Aug 08 '13 14:08

Kit Sunde


2 Answers

Actually, just do a query.order_by() is enough.

This is specified in the docs although it is a bit hard to find. The docs say:

If you don’t want any ordering to be applied to a query, not even the default ordering, call order_by() with no parameters.

Here is the implementation of order_by, for your reference -

def order_by(self, *field_names):     """     Returns a new QuerySet instance with the ordering changed.     """     assert self.query.can_filter(), \         "Cannot reorder a query once a slice has been taken."     obj = self._clone()     obj.query.clear_ordering(force_empty=False)     obj.query.add_ordering(*field_names)     return obj 
like image 85
jifeng.yin Avatar answered Sep 20 '22 17:09

jifeng.yin


You can use: clear_ordering method from query

"""Removes any ordering settings.   If 'force_empty' is True, there will be no ordering in the resulting query (not even the model's default). """ 

Example:

>>> from products.models import Product >>> products = Product.objects.filter(shortdesc='falda').order_by('id') >>> print products.query SELECT "products_product"."id", "products_product"."shortdesc" WHERE "products_product"."shortdesc" = falda ORDER BY "products_product"."id" ASC >>> products.query.clear_ordering() >>> print products.query SELECT "products_product"."id", "products_product"."shortdesc" WHERE "products_product"."shortdesc" = falda 
like image 20
Isidoro González Guillén Avatar answered Sep 21 '22 17:09

Isidoro González Guillén