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 неверен). Было бы лучше провести необходимые проверки.