Почему фильтр Django выдает мне эту ошибку 'Объект QuerySet' не имеет атрибута 'user_id'?

Когда я использую этот набор запросов, я не получаю никакой ошибки, и он возвращает идентификатор пользователя

UserProfile.objects.get(forget_password_token=forget_password_token)
print(user.user_id)

>>>19

Но когда я использую этот набор запросов UserProfile.objects.filter(forget_password_token=forget_password_token) почему я получаю эту ошибку QuerySet' object has no attribute 'user_id'

в чем разница между get и filter в Django? почему здесь не работает метод filter?

Когда пользователь вводит неправильный код в поля ввода, возникает эта ошибка UserProfile matching query does not exist.

При использовании .get() возвращается экземпляр найденного объекта, так что вы можете проверить непосредственно user_id. При использовании .filter() возвращается объект набора запросов, содержащий все найденные экземпляры объекта (его можно сравнить со списком результатов с некоторыми отличиями, так как это объектный тип Queryset). Таким образом, если вы хотите проверить user_id, вы должны сначала перебрать все элементы набора запросов

test = UserProfile.objects.filter(forget_password_token=forget_password_token)
for result in test:
    print(test.user_id)

Другим способом может быть возврат результата в виде списка с помощью .values_list()

test = UserProfile.objects.filter(forget_password_token=forget_password_token).values_list('user_id')
Вернуться на верх