У меня проблема с тем, чтобы заставить мой django заказать работу. Когда я определяю функцию в определении модели, которая возвращает QuerySet с вызовом order_by()
, я получаю правильный порядок. Однако, когда я звоню order_by()
за пределами определения, я не получаю правильный порядок.
рабочий код:
Следующие «детали» правильно упорядочены по имени:
# models.py
class UserProfile(models.Model):
user = models.ForeignKey(User, unique=True, default=0)
...
def get_parts_as_owner(self):
user=self.user
return Part.objects.filter(Q(owner=user)).order_by('name')
class Part(models.Model):
name = models.CharField(max_length=45,unique=True)
last_modified = models.DateTimeField(auto_now=True)
owner = models.ForeignKey(User)
# views.py
def view_parts(request):
user = request.user
owned = user.get_profile().get_parts_as_owner()
return render_to_response('parts/view_parts.html', {'owned': owned}, RequestContext(request))
не работает код:
следующее не упорядочено, как я ожидал (по имени):
# models.py
class UserProfile(models.Model):
user = models.ForeignKey(User, unique=True, default=0)
...
def get_parts_as_owner(self):
user=self.user
return Part.objects.filter(Q(owner=user))
class Part(models.Model):
name = models.CharField(max_length=45,unique=True)
last_modified = models.DateTimeField(auto_now=True)
owner = models.ForeignKey(User)
# views.py
def view_parts(request):
user = request.user
owned = user.get_profile().get_parts_as_owner().order_by('name')
return render_to_response('parts/view_parts.html', {'owned': owned}, RequestContext(request))
также не работает
Следующие заказы по имени, а не по last_modified, что я ожидаю
# models.py
class UserProfile(models.Model):
user = models.ForeignKey(User, unique=True, default=0)
...
def get_parts_as_owner(self,order='name'):
user=self.user
return Part.objects.filter(Q(owner=user)).order_by(order)
class Part(models.Model):
name = models.CharField(max_length=45,unique=True)
last_modified = models.DateTimeField(auto_now=True)
owner = models.ForeignKey(User)
# views.py
def view_parts(request):
user = request.user
owned = user.get_profile().get_parts_as_owner(order='last_modified')
return render_to_response('parts/view_parts.html', {'owned': owned}, RequestContext(request))
Почему это не так, как я ожидал? Какая разница, когда я звоню order_by
?