Сигналы в django. Профиль не существует

Для каждого пользователя, которого я создаю, я также создаю профиль с сигналами post_save. С помощью этого профиля вы можете следить за пользователями, используя поле many to many 'followers'. Когда я нажимаю addfollower или removefollower, я получаю ошибку, которая выделяет : profile = Profile.objects.get(pk = pk) как неправильную строку. Поскольку эта ошибка возникает только с профилями, которые я создаю с помощью сигналов, мне кажется, что проблема возникает, когда я создаю профиль автоматически.

Мой signals.py


from django.db.models.signals import post_save
from django.contrib.auth.models import User
from .models import Profile
from django.dispatch import receiver


@receiver (post_save, sender=User)
def create_profile(sender, instance, created, **kwargs):
    if created:
        profile = Profile.objects.create(user = instance)
        profile.followers.add('1')



мои методы:


class AddFollower(ListView):
    def post(self, request, pk , *args, **kwargs ):
        print('usuario aaaaaaaaaaaaaaaaaagregado')
        profile = Profile.objects.get(pk = pk)
        profile.followers.add(self.request.user)
        
        return redirect('profile', username = profile.user.username)

class RemoveFollower(ListView):

    def post(self, request, pk , *args, **kwargs ):
        print(f'reeeeeeeeeeeeeeeeeeeeeeeemovingFollower2{request.user}')
        profile = Profile.objects.get(pk = pk)
        profile.followers.remove(self.request.user)

   
        return redirect('profile', username = profile.user.username)

моя модель профиля:

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    profile_img = models.ImageField(default='user.png')
    followers = models.ManyToManyField(User,blank=True, related_name='followers')

    def __str__(self):
        return f'{self.user.username} profile'


Вы добавляете строку вместо экземпляра пользователя в поле "многие ко многим" вашего профиля, поэтому ваш профиль не создается.

Эта строка в вашем файле signals.py

profile.followers.add('1')

должно быть

profile.followers.add(instance)

но это заставит пользователя следить за собой, я не знаю, нужна ли вам такая функциональность, если нет, то вам, вероятно, следует удалить ее из сигналов

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