Django: объект 'int' не имеет атрибута 'course'

я фильтрую курс, используя id, я получил profile создателя курса и хочу добавить пользователя, который купил курс course_creator студентами, но я продолжаю получать эту ошибку 'int' object has no attribute 'course'

views.py

@require_http_methods(['GET', 'POST'])
def payment_response(request, user_course_id=None):
    status=request.GET.get('status', None)
    tx_ref=request.GET.get('tx_ref', None) 
    if status == "successful":
        if user_course_id:
            user_course = UserCourse.objects.filter(id=user_course_id).update(paid=True)

            profile = Profile.objects.get(user=user_course.course.course_creator)
            profile.my_students.add(user_course.user)
            student_profile.my_courses.add(user_course.course)

            student_profile.save()
            profile.save()
            user_course.save()

            return render(request, "payment/payment-success.html")
        else:
            return render(request, "payment/payment-failed.html")
    if status == "cancelled":
        return render(request, "payment/payment-failed.html")

Метод update() возвращает количество обновленных строк, вы хотите получить один результат, чтобы использовать его далее в представлении

user_course = UserCourse.objects.get(id=user_course_id)
user_course.paid = True
user_course.save()

Проблема лежит на линии-

user_course = UserCourse.objects.filter(id=user_course_id).update(paid=True)

.update() метод возвращает количество строк, обновленных после применения обновления. Поскольку вы фильтруете по ID, существует только один курс, который соответствует критериям. После обновления Django просто возвращает 1.

Если вы хотите применить обновление и затем использовать элемент, вы можете сделать следующее-

course_dict = UserCourse.objects.filter(id=user_course_id)
course_dict.update(paid=True)
user_course = course_dict.first()

или что-то подобное.

Между тем, может случиться так, что ID курса, который вы указали, не существует (возможно, курс удален, или id неверен). Было бы лучше провести необходимые проверки.

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