Как решить ошибку HttpRequest AssertionError в представлении Django Friend Request?
Я работаю над проектом Django, в котором пользователи могут отправлять и принимать запросы на дружбу. Когда запрос на дружбу принят, я хочу добавить отправителя и получателя в список друзей друг друга и отправить уведомление. Однако при попытке отправить уведомление я сталкиваюсь с ошибкой.
Описание проблемы:
Когда пользователь принимает запрос на добавление в друзья, я хочу добавить отправителя в список друзей получателя и наоборот. Однако я получаю следующую ошибку:
AssertionError: The
requestargument must be an instance of
django.http.HttpRequest, not
userauths.models.User. [28/May/2024 16:09:33] "GET /accept-friend-request/?id=8 HTTP/1.1" 500 121207
поэтому позвольте мне предоставить ссылку api на функцию
path("accept-friend-request/", views.accept_friend_request, name="accept-friend-request"),
позвольте мне предоставить функцию accept_friend_request
@api_view(['GET'])
@login_required
def accept_friend_request(request):
if request.method == 'GET':
sender_id = request.GET.get('id')
receiver = request.user
# Log the sender_id
logger.debug(f"Sender ID: {sender_id}")
try:
# Retrieve the sender user from the database
sender = User.objects.get(id=sender_id)
# Retrieve the sender's profile
sender_profile = sender.profile
# Add sender's profile to receiver's friends and vice versa
receiver.profile.friends.add(sender_profile)
sender_profile.friends.add(receiver.profile)
# Delete the friend request
friend_request = FriendRequest.objects.filter(receiver=receiver, sender=sender).first()
friend_request.delete()
# Send notification
send_notification(sender, receiver, None, None, noti_friend_request_accepted)
data = {
"message": "Accepted",
"bool": True,
}
return JsonResponse({'data': data})
except User.DoesNotExist:
logger.error(f"User with ID {sender_id} does not exist.")
return JsonResponse({'error': 'User does not exist.'}, status=404)
else:
return JsonResponse({'error': 'Only GET requests are allowed.'})
Вопрос: Как разрешить ошибку AssertionError, связанную с HttpRequest, в данном контексте?
Любая помощь или руководство будут очень признательны!
Что я пробовал:
Ведение журнала: Я добавил логирование, чтобы убедиться, что идентификатор отправителя извлекается правильно, что и происходит. Получение профиля: Я подтвердил, что доступ к sender.profile и receiver.profile осуществляется корректно. Проверка базы данных: Я подтвердил, что и пользователь, и запрос друга существуют в базе данных.
Ожидаемое поведение: Я ожидаю, что запрос на дружбу будет принят, пользователи будут добавлены в список друзей друг друга, и уведомление будет отправлено без возникновения AssertionError.
Я думаю, что эта функция в порядке, проблема, скорее всего, кроется в send_notification
одной.
Вы называете это так :
send_notification(sender, receiver, None, None, noti_friend_request_accepted)
Если send_notification
является представлением, оно неявно ожидает объект HttpRequest
в качестве первого аргумента, в то время как вы предоставляете объект пользователя :
sender = User.objects.get(id=sender_id)
По-прежнему предполагая, что send_notification
- это представление, вы должны извлечь из него логику, отправляющую уведомление, и вызвать ее внутри представления accept_friend_request
, потому что вызов другого представления будет работать не так, как вы ожидаете.