【问题标题】:Django follow feature with m2mDjango 使用 m2m 跟随功能
【发布时间】:2019-06-05 03:44:44
【问题描述】:

我试图解决问题,但卡住了。问题是我有一个可以关注的帖子。我的问题是我不知道如何添加跟踪按钮。这应该通过 url 来完成吗?还是应该将其作为模型中的一种方法?

我的问题也是在模型方面是否正确编写 - 使用中间模型Follower?

这是帖子模型,我想在这里添加关注者。我的意思是,每个有兴趣的人都可以关注这个帖子。

class Post(models.Model):
    owner = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='posts')
    title = models.CharField(max_length=255, unique=True)
    description = models.TextField(max_length=1024)
    followers = models.ManyToManyField(settings.AUTH_USER_MODEL, through='Follower', blank=True)
    is_visible = models.BooleanField(default=True)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('posts:post_detail', kwargs={'pk': self.pk})

    def number_of_followers(self):
        return self.followers.count()

这是我的追随者模型经理:

class FollowerManager(models.Manager):
    use_for_related_fields = True

    def follow(self, user, pk):
        post_object = get_object_or_404(Post, pk=pk)
        if user.is_authenticated():
            if user in post_object.followers.all():
                Follower.objects.filter(post=post_object, user=user).delete()
            else:
                Follower.objects.create(post=post_object, user=user)

这是追随者模型:

class Follower(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    post = models.ForeignKey(Post, on_delete=models.CASCADE)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)

    objects = FollowerManager()

【问题讨论】:

    标签: python django django-models orm many-to-many


    【解决方案1】:

    用户浏览器和数据库之间的交互只能通过 URL 和视图来完成。该视图可能会调用模型方法,但浏览器无法直接调用该方法。

    (另外我不明白您在管理器中在做什么。如果用户经过身份验证,您为什么要删除关注者?请注意,这始终是正确的,因此关注者将始终被删除。)

    【讨论】: