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