Проектирование модели Follower/Following в Django. Какой вариант выбрать?

Пишу очередной сервис для работы с социалками. Задумался над реализацией модели фолловеров.
В принципе, гугл выдает много вариантов, так как тема уже довольна избита.
Мучает меня следующее: кроме обычного отношения 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)
  • Вопрос задан
  • 628 просмотров
Пригласить эксперта
Ответы на вопрос 1
sim3x
@sim3x
Первым явно проще будет пользоваться
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы