Сигналы в 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)
но это заставит пользователя следить за собой, я не знаю, нужна ли вам такая функциональность, если нет, то вам, вероятно, следует удалить ее из сигналов