Django クエリセットの算出方法を教えていただきたいです。
記事毎にいいね
をしたユーザーを表示させたいのですが、
fillter()
を使ってどう抽出すればいいのかわかりません。
下記のコードですとobjects.all()
を使用しているので、記事関係なく、いいねをした人が全て抽出されます。
python
1-Views.py- 2class LikeList(View): 3 """いいねした人リスト""" 4 def get(self, request,*args, **kwargs): 5 context = {} 6 context['all_like_list'] = Like.objects.all() 7 return render(request, 'app/like_user_list.html', context) 8 9↓修正後 10class LikeList(View): 11 """いいねした人リスト""" 12 def get(self, request,*args, **kwargs): 13 post = User.objects.values('liked') 14 context = {} 15 context['all_like_list'] = Like.objects.filter(post=='title') 16 return render(request, 'app/like_user_list.html', context) 17
python
1-models.py- 2 3class Item(models.Model): 4 post_user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) 5 title = models.CharField(verbose_name='タイトル',max_length=20,help_text='20文字以内') 6介',max_length=300,blank=True,null=True,) 7 created_at = models.DateTimeField(verbose_name='登録日',auto_now_add=True) 8 image = StdImageField('画像', blank=True, null=True) 9 liked = models.ManyToManyField('User', blank=True, related_name='likes') 10 11class User(AbstractBaseUser, PermissionsMixin): 12 email = models.EmailField(_('email address'), null=True) 13 user_name = models.CharField(_('ユーザーネーム'), max_length=30,unique=True) 14 icon = StdImageField('アイコン', help_text='', blank=True, null=True) 15 favorite = models.ManyToManyField(Item, verbose_name='保存した記事', blank=True) 16 17 liked = models.ManyToManyField(Item, blank=True, related_name='likes') #追加 18 19class Like(models.Model): 20 user = models.ForeignKey(User, on_delete=models.CASCADE) 21 post = models.ForeignKey(Item, on_delete=models.CASCADE) 22 value = models.CharField(choices=LIKE_CHOICES, max_length=8) 23 updated = models.DateTimeField(auto_now=True) 24 created = models.DateTimeField(auto_now_add=True) 25 26 def __str__(self): 27 return f"{self.user}-{self.post}-{self.value}"
抽出方法についてはDjango データベース操作 についてのまとめを参考にさせて頂きました。
そもそもfilter()
使う必要がないのでしょうか?参考サイトなども教えていただけますと幸いです。
何か必要なものがあれば追記したしますのでよろしくお願いいたします。
###追記
filter()
をかけて試したのですが、TypeError: cannot unpack non-iterable bool object
のエラーがでてしまいました。
あなたの回答
tips
プレビュー