2016-04-13 3 views
1

Ich versuche ein gutes wie in meinem Blog zu machen. Problem, ich weiß nicht, wie man Manager hier benutzt. Raten Sie, das ist mein Hauptfehler. Kann add() für ein ManyToManyField nicht verwenden, das ein intermediäres Modell angibt. Verwenden Sie stattdessen den Manager von Posts.LikeTimestamp.Kann add() für ein ManyToManyField, das ein intermediäres Modell angibt, nicht verwenden. Benutze .LikeTimestamp's Manager stattdessen

meine Modelle:

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) 

meine Ansichten:

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

Antwort

1

beraten Mein Freund mein zu Benutzerfilter und weg Fehler. Und es gab auch eine falsche Zeile über miked_users create. Ich sollte das Erstellen und Löschen über das Timestamp-Modell verwenden. Hier ist der richtige Code.

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