簡體   English   中英

喜歡Django項目上的帖子

[英]Liking of Posts on a Django Project

我正在嘗試創建一個論壇網站,人們可以在該網站上發帖,並且可以對這些帖子進行投票。 問題是一個用戶可以多次投票支持任何帖子。 如何解決此問題,使用戶只能在某個帖子上投票一次?

我嘗試創建ManyToManyField,但似乎無法正常工作。


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

我要進行這項工作,以便多個用戶可以喜歡一個帖子,而一個用戶可以喜歡多個帖子,但是一個用戶只能贊一個帖子。

大概應該這樣定義模型:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM