我试图解决问题并陷入困境。问题是我有一个帖子可以关注。我的问题是我不知道如何添加跟踪按钮。是否应该通过url进行查看?还是应该将其作为模型中的一种方法?
我的问题还在于它是否根据模型正确编写-使用中间模型Follower?
这里是Post模型,我想在这里添加关注者。我的意思是,每个对此感兴趣的人都可以关注此帖子。
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()
答案 0 :(得分:0)
用户浏览器和数据库之间的交互只能通过URL和视图进行。该视图可能会调用模型方法,但浏览器无法直接调用该方法。
(另外,我不理解您在管理器中的操作。如果用户经过身份验证,为什么要删除关注者?请注意,这始终是真实的,因此始终会删除关注者。)