Как правильно объединить два набора запросов в Django
У меня есть следующая логика, реализованная в конечной точке.
def get(self, request, branchName, stack, resultType, buildNumberMIN, buildNumberMAX, format=None):
try:
# use ONE query to pull all data
relevant_notes = Notes.objects.filter(
branchName=branchName, stack=stack, resultType=resultType)
# filter on the endpoint parameters (range of numbers)
requested_range = relevant_notes.filter(
buildNumber__gte=buildNumberMIN, buildNumber__lte=buildNumberMAX)
# also pull latest note -- regardless of requested range
latest_note = relevant_notes.latest('buildNumber')
# join the notes
return_set = requested_range | latest_note
#serialize the data
serializer = serializers.NoteSerializerWithJiraData(
return_set, many=True)
return Response(serializer.data)
except Notes.DoesNotExist:
return Response({"message": f"No notes found"}, status=404)
Контекст: логика проста - получить диапазон заметок, но также включить последнюю заметку на основе параметров url. Если диапазон заметок не содержит данных, все равно возвращается последняя.
Проблема, с которой я столкнулся
AttributeError at /api/v2/notes/Test/Test/Test/1/2/
'Notes' object has no attribute '_known_related_objects'
Возможно, ему не нравится, что я добавляю попытку объединить набор запросов с одним объектом...
Проблема здесь связана с типом объектов, которые я пытаюсь объединить.
Один - кверисет, содержащий множество экземпляров нот, другой - один экземпляр ноты.
Вместо использования .latest()
я смог решить проблему, просто используя .filter()
, так как метод фильтрации возвращает набор запросов... примерно так
latest_note = relevant_notes.order_by('-buildNumber')[:1]