В фильтрации фреймворка 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)