Посмотрим что происходит в первом и втором случае
def latest(self, field_name=None):
return self._earliest_or_latest(field_name=field_name, direction="-")
def _earliest_or_latest(self, field_name=None, direction="-"):
...
obj = self._clone()
obj.query.set_limits(high=1)
obj.query.clear_ordering(force_empty=True)
obj.query.add_ordering('%s%s' % (direction, order_by))
return obj.get()
def order_by(self, *field_names):
...
obj = self._clone()
obj.query.clear_ordering(force_empty=False)
obj.query.add_ordering(*field_names)
return obj
def __getitem__(self, k):
...
qs = self._clone()
qs.query.set_limits(k, k + 1)
return list(qs)[0]
Т.е. в обоих случаях к query применяются методы set_limits, clear_ordering, add_ordering. Отличаются они лишь агрументом force_empty=False/True и полем по которому ты сортируешь (не понятно зачем ты сортируешь по user_link)