喜欢Django项目的帖子

2024-09-29 21:36:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个论坛网站,人们可以发布和这些职位可以得到投票。问题是一个用户可以多次向上投票任何帖子。我该如何解决这个问题,以便用户只能在某个帖子上投票一次

我试过创建一个多域,但似乎无法正常工作


class Product(models.Model):
    title = models.CharField(max_length=200)
    body = models.TextField()
    url = models.TextField()
    votes_total = models.IntegerField(default=1)
    image = models.ImageField(upload_to='images/')
    icon = models.ImageField(upload_to='images/')
    pubdate = models.DateTimeField()
    voters = models.OneToManyField('PostVoter')


class PostVoter(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)


def upvote(request, product_id):
    if request.method == 'POST':
        product = get_object_or_404(Product, pk=product_id)
        postvoters = PostVoter.objects.all()
        if postvoters.filter(user=request.user).exists():
            return redirect('home')
        else:
            product.votes_total += 1
            PostVoter.objects.create(user=request.user)
            product.save()
            return redirect('/products/' + str(product.id))

我想让这项工作,使多个用户可以喜欢一个职位和一个用户可以喜欢多个职位,但一个用户可以喜欢一个特定的职位只有一次


Tags: 用户idmodelmodelsrequest职位product投票
1条回答
网友
1楼 · 发布于 2024-09-29 21:36:11

也许你应该这样定义你的模型:

class Product(models.Model):
    # ...
    voters = models.ManyToManyField(User)

并更新视图:

def upvote(request, product_id):
    if request.method == 'POST':
        product = get_object_or_404(Product, pk=product_id)
        postvoters = product.voters.filter(pk=request.user.pk)  # Or `Product.objects.filter(pk=product.pk, voters=request.user)`
        if postvoters.exists():
            return redirect('home')
        else:
            product.votes_total += 1
            product.voters.add(request.user)
            product.save()
            return redirect('/products/' + str(product.id))

相关问题 更多 >

    热门问题