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()
。