Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法在指定中间模型的ManyToManyField上使用add()。使用.LikeTimestamp';他是经理_Python_Django_Many To Many - Fatal编程技术网

Python 无法在指定中间模型的ManyToManyField上使用add()。使用.LikeTimestamp';他是经理

Python 无法在指定中间模型的ManyToManyField上使用add()。使用.LikeTimestamp';他是经理,python,django,many-to-many,Python,Django,Many To Many,我正试图在我的博客上写一篇好文章。遇到问题,不知道如何使用这里的管理器。 我猜这是我的主要错误。无法在指定中间模型的ManyToManyField上使用add()。使用Posts,比如teimestamp的经理 我的型号: class Like(models.Model): class Meta: db_table = 'like' post = models.OneToOneField(Post, null=True) liked_users = mod

我正试图在我的博客上写一篇好文章。遇到问题,不知道如何使用这里的管理器。 我猜这是我的主要错误。无法在指定中间模型的ManyToManyField上使用add()。使用Posts,比如teimestamp的经理

我的型号:

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'))
我的观点:

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

我的朋友建议我的用户过滤,错误消失了。此外,关于用户创建的内容也有错误的说法。我应该使用创建和删除时间戳模型。这是正确的代码

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