В основном мне нужен корректный способ сделать следующий:-
obj1 = Model1.objects.select_related('model2').get(attribute1=value1)
obj2 = Model1.objects.select_related('model2').get(attribute2=value2)
model2_qs = QuerySet(model=Model2, qs_items=[obj1.model2,obj2.model2])
Я не могу думать право, но делать, что-то как следующее кажется бесконечно глупым мне.: -
obj1 = Model1.objects.select_related('model2').get(attribute1=value1)
model2_qs = Model2.objects.filter(pk=obj1.model2.pk)
Да, я должен закончить с QuerySet Model2 для более позднего использования (конкретно для передачи форме Django).
В первом блоке кода выше, даже если я использую filter
вместо get
У меня, очевидно, будет QuerySet Model1. Обратные поиски не могут всегда быть возможными в моем случае.
Если вы просто хотите создать набор элементов, которые вы выбрали в результате какого-то сложного процесса, не представимого в SQL, вы всегда можете использовать оператор __in
.
wanted_items = set()
for item in model1.objects.all():
if check_want_item(item):
wanted_items.add(item.pk)
return model1.objects.filter(pk__in = wanted_items)
Очевидно, что вам придется адаптировать его к вашей ситуации, но он должен дать вам хотя бы отправную точку.