Запрос Django ManytoManyField не существует

Я создал модели для логики списка друзей и запроса друга. В FriendRequest я определил метод, который добавляет отношение User к FriendList, если вызван метод accept. Однако я не могу сделать это из-за ошибки, показанной ниже. Я не понимаю ошибку, поскольку я добавляю User в модель.

views.py

friend_request = FriendRequest.objects.get(id=request_id)

if request_option == 'accept':
  friend_request.accept()
if request_option == 'decline':
  friend_request.decline()

models.py

class FriendList(models.Model):
    user    = models.OneToOneField(User, on_delete=models.CASCADE, related_name="user")
    friends = models.ManyToManyField(User, blank=True, related_name="friends") 

    def add_friend(self, account):
        if not account in self.friends.all():
            self.friends.add(account)
            self.save()


class FriendRequest(models.Model):
    sender = models.ForeignKey(User, on_delete=models.CASCADE, related_name="sender")
    receiver = models.ForeignKey(User, on_delete=models.CASCADE, related_name="receiver")
    is_active = models.BooleanField(blank=False, null=False, default=True)
    timestamp = models.DateTimeField(auto_now_add=True)

    def accept(self):
        receiver_friend_list = FriendList.objects.get(user=self.receiver)
        if receiver_friend_list:
            receiver_friend_list.add_friend(self.sender)
            sender_friend_list = FriendList.objects.get(user=self.sender)
            if sender_friend_list:
                sender_friend_list.add_friend(self.receiver)
                self.is_active = False
                self.save()

    def decline(self):
        self.is_active = False
        self.save()
 File "C:\Users\models.py", line 77, in accept
    receiver_friend_list = FriendList.objects.get(user=self.receiver)
  File "C:\Python310\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "C:\Python310\lib\site-packages\django\db\models\query.py", line 496, in get
    raise self.model.DoesNotExist(
friends.models.FriendList.DoesNotExist: FriendList matching query does not exist.

Вы запрашиваете несуществующий объект. Чтобы избежать этой ошибки, используйте get_or_create:

def accept(self):
    receiver_friend_list, created = FriendList.objects.get_or_create(user=self.receiver)
    if receiver_friend_list:
        receiver_friend_list.add_friend(self.sender)
        sender_friend_list = FriendList.objects.get(user=self.sender)
        if sender_friend_list:
            sender_friend_list.add_friend(self.receiver)
            self.is_active = False
            self.save()

Это то, что показывает Django Docs, и есть питонический способ, также взятый из Django Docs.

try:
    receiver_friend_list= FriendList.objects.get(user=self.receiver)
except FriendList.DoesNotExist:
    receiver_friend_list = FriendList(user=self.receiver)
    receiver_friend_list.save()
Вернуться на верх