gpt4 book ai didi

python - 在 Django 中允许每个用户生成 1 个 View

转载 作者:行者123 更新时间:2023-12-01 02:35:23 25 4
gpt4 key购买 nike

this question我想出了下面的代码。

行为应如下所示:

  1. 每个建议可以收到多个投票
  2. 每个用户仅允许 1 次投票

它工作正常,但我想知道最好的方法是什么?

vote_form.html

<form action="{% url 'add_vote' suggestion.id %}" method="post">
{% csrf_token %}
<input type="submit" value="I want to vote">
</form>

url.py

urlpatterns = [
url(r'^suggestion/(?P<pk>\d+)/$', views.SuggestionDetail.as_view(), name="suggestion_detail"),
url(r'^suggestion/(?P<pk>\d+)/vote/$', views.add_vote, name='add_vote'),
]

模型.py

class Vote(models.Model):
suggestion = models.ForeignKey(Suggestion)
voter = models.ForeignKey('auth.User')
vote_count = models.BooleanField()

View .py

def add_vote(request, pk):
suggestion = get_object_or_404(Suggestion, pk=pk)
vote = Vote(
suggestion = suggestion,
voter = request.user,
vote_count = True)
has_user_voted = Vote.objects.filter(voter=request.user, suggestion=suggestion).count()
if has_user_voted < 1:
vote.save()
else:
messages.error(request, 'It seems you have already voted, only one vote is allowed')
return HttpResponseRedirect(reverse('suggestion_detail', args=(suggestion.id,)))

最佳答案

第一个解决方案是添加 unique-together在你的模型中

class Vote(models.Model):
suggestion = models.ForeignKey(Suggestion)
voter = models.ForeignKey('auth.User')
vote_count = models.BooleanField()

class Meta:
unique_together = ("suggestion", "voter")

如果vote_count始终为True,您也可以使用get-or-create

def add_vote(request, pk):
suggestion = get_object_or_404(Suggestion, pk=pk)
vote, created = Vote.objects.get_or_create(
voter=request.user,
suggestion=suggestion,
vote_count=True)
if not created:
messages.error(request, 'It seems you have already voted, only one vote is allowed')
return HttpResponseRedirect(reverse('suggestion_detail', args=(suggestion.id,)))

关于python - 在 Django 中允许每个用户生成 1 个 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46301637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com