6👍
✅
You could use Subquery
like in this answer https://stackoverflow.com/a/43883397/3627387 or with use of Prefetch
https://stackoverflow.com/a/31237026/3627387
Here is one way to achieve this with Prefetch
:
schedules_prefetch = Prefetch(
'schedule_set',
queryset=Schedule.objects.filter(user=user))
for question in questions_queryset.prefetch_related(schedules_prefetch):
try:
# using max here so it wouldn't do another DB hit
schedule = max(question.schedule_set.all(),
key=lambda x: x.datetime_added)
except ValueError:
schedule = None
Here is an example using Subquery
(it might not actually work, but will give you the general idea):
from django.db.models import OuterRef, Subquery
schedules = (Schedule.objects
.filter(user=user, question=OuterRef('pk'))
.order_by('datetime_added'))
questions_queryset = (questions_queryset
.annotate(latest_schedule=Subquery(schedules[:1])))
for question in questions_queryset:
schedule = question.latest_schedule
2👍
# Get the question ids
question_ids = questions_queryset.values_list('id', flat=True)
# get the beloved shedule
schedule = Schedule.objects.filter(question__in=question_ids, user=user).latest(field_name='datetime_added')
# You may opt for Schedule.objects.get() so as not to run into
# the problem of multiple objects returned if all you need is strictly one schedule
- [Django]-Django 1.1 – comments – 'render_comment_form' returns TemplateSyntaxError
- [Django]-Execute background process from django that can't be interrupted by the web server
- [Django]-DJANGO allow access to a certain view only from a VPN Network
- [Django]-Django Apache wsgi changes python version
- [Django]-Django Rest Framework – AssertionError in tests
Source:stackexchange.com