Как использовать указанный c QuerySet для поиска связанных полей в Django? - PullRequest
0 голосов
/ 23 апреля 2020

Я вложил в подкласс QuerySet, чтобы предоставить ему дополнительный метод, который аннотирует QuerySet из MyModel настраиваемым полем (содержащим последнее связанное Person, для целей оптимизации):

class MyModelQuerySet(models.QuerySet):
    def with_last_person(self):
        people = Person.objects.filter(user_id=OuterRef('id'))
        people = people.annotate(person=RowToJson(F('id'), output_field=JSONField()))
        return self.annotate(person=Subquery(people.values('person')[:1]))

Это прекрасно работает (например, [model.person for model in MyModel.objects.with_last_person()])

Однако сейчас я получаю другую модель , которая имеет отношение внешнего ключа к MyModel:

other_model = OtherModel.objects.get(foo=bar) #...

Понятно, что поле other_model.my_model содержит неотмеченный экземпляр MyModel.

. Есть ли способ использовать этот спецификатор c QuerySet для поиска связанных MyModel с OtherModel? Что-то вроде:

OtherModel.objects.filter(foo=bar).select_related('my_model', use_queryset=MyModelQuerySet)

Полагаю, я мог бы просто скопировать и вставить код из MyModelQuerySet.with_last_person в запрос OtherModel, но это излишне дублирует код. Есть ли другое решение, которое мне не хватает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...