Index: django/db/models/query.py
===================================================================
--- django/db/models/query.py	(revision 9110)
+++ django/db/models/query.py	(working copy)
@@ -213,9 +213,11 @@
                 if len(self._result_cache) < bound:
                     self._fill_cache(bound - len(self._result_cache))
             return self._result_cache[k]
-
+        
+        qs = self._clone()
+        if not self.model._meta.ordering:
+            qs.query.add_ordering(self.model._meta.pk.name)
         if isinstance(k, slice):
-            qs = self._clone()
             if k.start is not None:
                 start = int(k.start)
             else:
@@ -226,8 +228,8 @@
                 stop = None
             qs.query.set_limits(start, stop)
             return k.step and list(qs)[::k.step] or qs
+        
         try:
-            qs = self._clone()
             qs.query.set_limits(k, k + 1)
             return list(qs)[0]
         except self.model.DoesNotExist, e:
