Сигнал, чтобы, когда кто-то следует за кем-то, между ними создавалась нить 2
У меня есть это в моделях, и я хочу создать сигнал, что когда кто-то следует за кем-то, автоматически создается поток между этим человеком и человеком, за которым он последовал. Модели находятся в 2 разных приложениях, одно из социальной сети, другое из чата.
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
bio = models.CharField(default='Hola, este es mi Blooby!!!', max_length=100)
image = models.ImageField(default='default.png')
def __str__(self):
return f'Perfil de {self.user.username}'
def following(self):
user_ids = Relationship.objects.filter(from_user=self.user)\
.values_list('to_user_id', flat=True)
return User.objects.filter(id__in=user_ids)
def followers(self):
user_ids = Relationship.objects.filter(to_user=self.user)\
.values_list('from_user_id', flat=True)
return User.objects.filter(id__in=user_ids)
class Post(models.Model):
timestamp = models.DateTimeField(default=timezone.now)
content = models.TextField(max_length=300)
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='posts')
liked = models.ManyToManyField(User, default=None, blank=True)
class Meta:
ordering = ['-timestamp']
def __str__(self):
return self.content
@property
def num_likes(self):
return self.liked.all().count()
LIKE_CHOICES = (
('Like', 'Like'),
('Unlike', 'Unlike'),
)
class Like(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
post = models.ForeignKey(Post, on_delete=models.CASCADE)
value = models.CharField(choices=LIKE_CHOICES ,default='Like', max_length=10)
class Relationship(models.Model):
from_user = models.ForeignKey(User, related_name='relationships', on_delete=models.CASCADE)
to_user = models.ForeignKey(User, related_name='related_to', on_delete=models.CASCADE)
def __str__(self):
return f'{self.from_user} to {self.to_user}'
class Comment(models.Model):
post = models.ForeignKey(Post, related_name="comments", on_delete=models.CASCADE)
name = models.ForeignKey(User,related_name="user_name" , on_delete=models.CASCADE)
body = models.TextField()
timestamp = models.DateTimeField(default=timezone.now)
Модели чата приложения, вот нить
class ThreadManager(models.Manager):
def by_user(self, **kwargs):
user = kwargs.get('user')
lookup = Q(first_person=user) | Q(second_person=user)
qs = self.get_queryset().filter(lookup).distinct()
return qs
class Thread(models.Model):
first_person = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='thread_first_person')
second_person = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True,
related_name='thread_second_person')
updated = models.DateTimeField(auto_now=True)
timestamp = models.DateTimeField(auto_now_add=True)
objects = ThreadManager()
class Meta:
unique_together = ['first_person', 'second_person']
class ChatMessage(models.Model):
thread = models.ForeignKey(Thread, null=True, blank=True, on_delete=models.CASCADE, related_name='chatmessage_thread')
user = models.ForeignKey(User, on_delete=models.CASCADE)
message = models.TextField()
timestamp = models.DateTimeField(default=timezone.now)