2016-04-13 13 views
1

Blogumda olduğu gibi iyi çalışıyorum. Sorun var, müdürü nasıl kullanacağımı bilmiyorum. Sanırım bu benim ana hatam. Bir aracı modeli belirten ManyToManyField üzerinde add() kullanılamaz. Bunun yerine Posts.LikeTimestamp'ın Yöneticisi'ni kullanın.Ara bir model belirten ManyToManyField üzerinde add() kullanılamaz. .LikeTimestamp's Manager yerine

benim modeller:

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) 

görüşlerim:

@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')) 

cevap

1

Arkadaşım gitti kullanıcı filtre ve yanlışlıkla benim tavsiye etti. Ve ayrıca liked_users yarattığı konusunda yanlış bir çizgi vardı. Zaman damgası modeli ile oluşturma ve silme kullanmalıyım. İşte doğru kod.

@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')) 
İlgili konular