0

私はフォーラムのモデルを持っています。そこには、質問、本文、pub_date、画像、作成者、いいねのフィールドがあります。管理者から、特定のフォーラムの特定のユーザーのいいねを追加できます。しかし、私は今、混乱しています。ビューで request.user に好きなものを追加する方法は?

models.py:

class Forum(models.Model):
    question = models.CharField(max_length=150)
    body = models.TextField()
    pub_date = models.DateTimeField(default=datetime.now)
    image = models.ImageField(upload_to=get_upload_file_name)
    creator = models.ForeignKey(User, related_name="creator_set")
    likes = models.ManyToManyField(User, through="Like")

    def __unicode__(self):
        return self.question

class Like(models.Model):
    forum = models.ForeignKey(Forum)
    liked = models.ForeignKey(User)
    liked_date = models.DateTimeField(default=datetime.now)

    def __unicode__(self):
        return "%s likes %s" % (self.liked, self.forum)

私はこのようにすることを考えました:

>>>forum = Forum.objects.get(id=1)
>>>user = request.user
>>>user.like_set.add(forum)

しかし、それは役に立ちませんでした。どうぞ、どんな助けでも大歓迎です。ありがとうございました。

4

1 に答える 1

1

最初に、ビューを対象とする URLを作成する必要があります。forum_idURL はURL パラメータとして aを渡します。

from datetime import datetime
from django.shortcuts import get_object_or_404

@login_required
def update_likes(request, forum_id):
    forum = get_object_or_404(Forum, id=forum_id)
    like, _ = Like.objects.get_or_create(user=request.user, forum=forum, 
                   defaults={'liked_date': datetime.now()})
    #rest of the code here. 

これは一つの方法です。考えた方法で行うこともできますが、生成される可能性のある重複を手動で制御する必要があります。unique_together( で aを指定できます('forum', 'liked'))

そして削除する

@login_required
def delete_likes(request, forum_id):
    forum = get_object_or_404(Forum, id=forum_id)
    like = get_object_or_404(Like, user=request.user, forum=forum)
    like.delete()
    #rest of the code here. 
于 2013-08-17T18:20:04.837 に答える