В фильтрации фреймворка Django REST, Что означает "purchaser__username=username"

Я изучаю использование Django Rest framework в моем проекте, но я запутался в этом коде

    serializer_class = PurchaseSerializer

    def get_queryset(self):
        """
        Optionally restricts the returned purchases to a given user,
        by filtering against a `username` query parameter in the URL.
        """
        queryset = Purchase.objects.all()
        username = self.request.query_params.get('username')
        if username is not None:
            queryset = queryset.filter(purchaser__username=username)
        return queryset

Что означает purchaser__username=username в этом коде? Это сбивает меня с толку уже некоторое время.

Двойное подчеркивание в фильтре queryset часто означает, что вы следуете каким-то отношениям между различными моделями.

В данном случае у вас есть модель Purchase, а у этой модели есть поле 'purchaser'. Поле 'purchaser', скорее всего, будет ссылкой "многие-к-одному" на другую модель, такую как User (потому что у Purchases может быть один покупатель, а User может совершать много покупок). Модель User имеет поле 'username', вероятно, простую строку.

Итак, queryset.filter говорит: получить все экземпляры модели Purchase, которые ссылаются на определенного пользователя в поле purchaser. Чтобы определить конкретного пользователя, сопоставьте поле 'username' пользователя (purchaser__username) со строкой имени пользователя из строки запроса URL (т.е. get_queryset.html?username=fred123)

Вернуться на верх