Я хочу создать webapp, например Quora или Medium, где пользователь может следить за пользователями или некоторыми темами.
например: userA следует (userB, userC, tag-Health, tag-Finance).
Это модели:
class Relationship(models.Model):
user = AutoOneToOneField('auth.user')
follows_user = models.ManyToManyField('Relationship', related_name='followed_by')
follows_tag = models.ManyToManyField(Tag)
class Activity(models.Model):
actor_type = models.ForeignKey(ContentType, related_name='actor_type_activities')
actor_id = models.PositiveIntegerField()
actor = GenericForeignKey('actor_type', 'actor_id')
verb = models.CharField(max_length=10)
target_type = models.ForeignKey(ContentType, related_name='target_type_activities')
target_id = models.PositiveIntegerField()
target = GenericForeignKey('target_type', 'target_id')
tags = models.ManyToManyField(Tag)
Теперь это даст следующий список:
following_user = userA.relationship.follows_user.all()
following_user
[<Relationship: userB>, <Relationship: userC>]
following_tag = userA.relationship.follows_tag.all()
following_tag
[<Tag: tag-job>, <Tag: tag-finance>]
Чтобы фильтровать, я пробовал этот путь:
Activity.objects.filter(Q(actor__in=following_user) | Q(tags__in=following_tag))
Но так как актер является GenericForeignKey, я получаю сообщение об ошибке:
FieldError: Field 'actor' не генерирует автоматическое обратное отношение и поэтому не может использоваться для обратного запроса. Если это GenericForeignKey, подумайте о добавлении GenericRelation.
Как я могу отфильтровать действия, которые будут уникальными, со списком пользователей и списком тегов, которые следуют пользователю? Чтобы быть конкретным, как я буду фильтровать GenericForeignKey со списком объектов, чтобы получить действия следующих пользователей.