[英]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.