31👍
✅
If thing_date()
is a function in python code, you can’t get the database to sort on it. Which means it doesn’t make sense to put the queryset. You’ll have to sort the results after you get them into python. This will be fine so long as you’re not dealing with a very large number of objects.
qs = Things.objects.filter(user='Bill')
unsorted_results = qs.all()
sorted_results = sorted(unsorted_results, key= lambda t: t.thing_date())
If you’ve got a very large number of Things
then you’ll have to figure some way to get thing_date
into the database or else you’ll have memory issues.
16👍
see these answers to use a computed value to sort a QuerySet
:
Basically if thing_date()
can be determined using a query expression, then you can use it to annotate and search the query set.
from django.db.models import F
from django.utils import timezone
test = Things.objects.filter(user='Bill').annotate(
thing_date=(F('<date field>') - timezone.now()) # some computation
).order_by('thing_date')
- [Django]-Can you give a Django app a verbose name for use throughout the admin?
- [Django]-'SSLError' installing with pip
- [Django]-Access django model fields label and help_text
Source:stackexchange.com