@royalkaden (やすなが)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

いいね機能

Djangoを使い、いいね機能を作成しています。
https://h-memo.com/how-to-make-a-like-button-using-django/
のサイトを参考にいいね機能を作成していますが、関数内の処理がなにをしているのかわからないので教えてください。

わからない処理

get()の引数に'articl_id'とありますが参考にしているサイトでは'articl_id'という記述にはmodels.pyに等にはなくこの一行でいきなり出てきたので、なにをしているのかまったくわかりません。(自分なりに調べましたが)

article = get_object_or_404(Article, pk=request.POST.get('articl_id'))

以下はサイトを参考に自分なりに作ったソースコードです

model.py
class Post(models.Model):
    """投稿テーブル"""
    post_id = models.UUIDField(verbose_name='投稿ID', primary_key=True, default=uuid.uuid4, editable=False)

    user_id = models.ForeignKey(CustomUser, verbose_name='ユーザーID', on_delete=models.CASCADE)
    category_no = models.ForeignKey('Category', verbose_name='カテゴリ番号', on_delete=models.SET_NULL, null=True)
    title = models.CharField(verbose_name='タイトル', max_length=30)
    content = models.TextField(verbose_name='内容', blank=False)
    photo = models.ImageField(verbose_name='写真', blank=True)
    hide_reason = models.TextField(verbose_name='伏字化理由', blank=True)
    created_at = models.DateTimeField(verbose_name='作成日時', auto_now_add=True)

    class Meta:
        verbose_name_plural = '投稿テーブル'

    def __str__(self):
        return self.title
class Good(models.Model):
    """イイネテーブル"""
    post_id = models.ForeignKey('Post', verbose_name='投稿ID', on_delete=models.CASCADE)
    user_id = models.ForeignKey(CustomUser, verbose_name='ユーザーID', on_delete=models.CASCADE)
    created_at = models.DateTimeField(verbose_name='登録日時', auto_now=True)

    class Meta:
        verbose_name_plural = 'イイネテーブル'
views.py
def ArticlesView(request):
    print("ArticlesView実行されました")
    articles = Post.objects.all()
    # liked_listというものを用意し、閲覧しているユーザー(request.userで取得)が過去にどの記事をいいねしたかを格納しておく。
    liked_list = []
    for article in articles:
        liked = article.good_set.filter(user_id=request.user)
        print(liked)
        if liked.exists():
            liked_list.append(article.id)

    context = {
        'articles': articles,
        'liked_list': liked_list,
    }

    return render(request, 'articles.html', context)

def LikeView(request):
    print("LikeView実行されました")
    if request.method =="POST":
        article = get_object_or_404(Post, pk=request.POST.get('post_id'))
        user = request.user
        liked = False
        like = Good.objects.filter(article=article, user_id=user)
        if like.exists():
            like.delete()
        else:
            like.create(article=article, user=user)
            liked = True

        context={
            'post_id': article.id,
            'liked': liked,
            'count': article.good_set.count(),
        }

    if request.is_ajax():
        return JsonResponse(context)

自分で試したこと

自分はarticle_idをpost_idに変換し書いています、がtemplateでいいねを押しても押せるだけで色も変わらずなにも変化はありません
article = get_object_or_404(Post, pk=request.POST.get('post_id'))
自分が一番知りたいのは、article_idは何をしているのかを教えていただけたら嬉しいです。よろしくお願いします。

0 likes

1Answer

viewsにarticle.idが使われていますが、そこはどうでしょう?
あとはテンプレートのformでidを取得できていないとか?

0Like

Your answer might help someone💌