class Snippet(models.Model):
language = models.CharField(max_length=25)
content = models.TextField(max_length=500)
description = models.CharField(max_length=200)
PRIVACY_CHOICES = (
('Me', 'Me'),
('Friends', 'Friends'),
('Everyone', 'Everyone'),
)
privacy = models.CharField(max_length=8,choices=PRIVACY_CHOICES,default='Everyone')
class SiteUser(models.Model):
user = models.OneToOneField(User)
snippets = models.ManyToManyField('Snippet', null=True, blank=True)
friends = models.ManyToManyField(User, related_name='friends')
我正在尝试检查当前用户是否是他正在查看其页面的人的朋友。然后,根据他们是否是朋友,我只需要显示具有正确隐私级别的片段。
因此,如果他们是朋友,则只有隐私 = 'Everyone' 或 'Friends' 的片段,如果是陌生人,则只有隐私 = 'Everyone' 的片段,等等。
我能够轻松找出所需的隐私级别,但我很难对片段进行正确过滤。
这是我检查他们是否是朋友的方法:
user.siteuser.friends.get(username=request.user.username)
这是我尝试按隐私级别过滤片段的方式:
saved_snippets = user.siteuser.snippets.filter(privacy='Everyone')
由于某种原因,过滤根本不起作用,我不明白,因为通常我只是这样做:
saved_snippets = user.siteuser.snippets.all()
它正确地获取了该用户的片段,所以我不确定为什么all()
有效,但不是filter()
.