Пишу очередной сервис для работы с социалками. Задумался над реализацией модели фолловеров.
В принципе, гугл выдает много вариантов, так как тема уже довольна избита.
Мучает меня следующее: кроме обычного отношения Follower/Followed by должны быть реализованы и другие, вроде: Blocked/Blocked by, Track/Tracked by, Competitor, и т.д.
Я пока вижу 2 варианта развития событий:
class SMMProfile(models.Model):
username = models.CharField("Username")
follows = models.ManyToManyField("self", related_name = 'followed_by')
blocks = models.ManyToManyField("self", related_name = 'blocked_by')
tracks = models.ManyToManyField("self", related_name = 'tracked_by')
либо же такой
class SMMProfile(models.Model):
username = models.CharField("Username")
relations = models.ManyToManyField('self', symmetrical=False, through='Relationship')
class Relationship(models.Model):
TYPE_CHOICES = (
(0, "Follow"),
(1, "Block"),
(2, "Track"))
who = models.ForeignKey(SMMProfile, related_name="who")
whom = models.ForeignKey(SMMProfile, related_name="whom")
type = models.PositiveIntegerField("Type", choices=TYPE_CHOICES)