2016-04-13 2 views
1

私は私のブログのようなものを作ろうとしています。問題があった、ここでマネージャを使う方法を知らない。 これが私の主な間違いだと思います。仲介モデルを指定するManyToManyFieldに対してadd()を使用することはできません。代わりにPosts.LikeTimestampのマネージャを使用してください。中間モデルを指定するManyToManyFieldにadd()を使用することはできません。代わりに.LikeTimestampのマネージャを使用してください

私のモデル:

class Like(models.Model): 
    class Meta: 
     db_table = 'like' 
    post = models.OneToOneField(Post, null=True) 
    liked_users = models.ManyToManyField(User, blank=True, through='LikeTimestamp') 
    likes = models.IntegerField(default=0, blank=True) 


class LikeTimestamp(models.Model): 
    class Meta: 
     db_table = 'liketimestamp' 
    timestamp = models.DateTimeField(auto_now=True, auto_now_add=False) 
    like = models.ForeignKey(Like) 
    user = models.ForeignKey(User) 

私の見解:

@login_required 
def like_post(request, comments_id): 
    try: 
     like, created = Like.objects.get_or_create(comments_id=comments_id) 
     like.post = Post.objects.get(id=comments_id) 
     if request.user in like.liked_users.all(): 
      like.liked_users.remove(request.user) 
      like.likes -= 1 
     else: 
      like.liked_users.add(request.user) 
      like.likes += 1 
     like.save() 
    except ObjectDoesNotExist: 
     raise Http404 
    return redirect(request.META.get('HTTP_REFERER')) 

答えて

1

は私の友人がなくなって、ユーザフィルタと間違いに私に助言。また、favorite_usersの作成について間違った行がありました。私はタイムスタンプモデルを通して作成と削除を使うべきです。ここに正しいコードです。

@login_required 
def like_post(request, post_id): 
    try: 
     like, created = Like.objects.get_or_create(post_id=post_id) 
     like.post = Post.objects.get(id=post_id) 
     if like.liketimestamp_set.filter(user=request.user).exists(): 
      LikeTimestamp.objects.filter(like_id=like.id, user=request.user).delete() 
      like.likes -= 1 
     else: 
      LikeTimestamp.objects.create(like_id=like.id, user=request.user) 
      like.likes += 1 
     like.save() 
    except ObjectDoesNotExist: 
     raise Http404 
    return redirect(request.META.get('HTTP_REFERER')) 
関連する問題