在Django中实现一个具有多个选项的投票系统,并且限制其可见性,可以通过以下步骤来实现:
from django.db import models
from django.contrib.auth.models import User
class Poll(models.Model):
question = models.CharField(max_length=200)
is_visible = models.BooleanField(default=False)
class PollOption(models.Model):
poll = models.ForeignKey(Poll, on_delete=models.CASCADE)
option_text = models.CharField(max_length=200)
from django.shortcuts import render, get_object_or_404
from django.contrib.auth.decorators import login_required
from .models import Poll
@login_required
def poll_detail(request, poll_id):
poll = get_object_or_404(Poll, pk=poll_id)
if not poll.is_visible:
return render(request, 'polls/poll_not_visible.html')
# 处理投票逻辑
return render(request, 'polls/poll_detail.html', {'poll': poll})
polls/poll_detail.html
:
<h1>{{ poll.question }}</h1>
<ul>
{% for option in poll.polloption_set.all %}
<li>{{ option.option_text }}</li>
{% endfor %}
</ul>
polls/poll_not_visible.html
:
<h1>This poll is not visible to you.</h1>
在视图中使用@login_required
装饰器来确保只有登录用户才能访问投票详情。可以根据需要进一步细化权限控制逻辑。
原因: 可能是因为is_visible
字段设置为False
,或者用户没有权限访问。
解决方法: 检查is_visible
字段的值,并确保用户具有访问权限。
原因: 没有使用@login_required
装饰器或者用户未登录。
解决方法: 确保在视图中使用了@login_required
装饰器,并引导用户登录。
原因: 可能是因为模板中的数据绑定错误。 解决方法: 检查模板中的数据绑定逻辑,确保正确显示投票选项。
通过以上步骤,你可以实现一个具有多个选项并且限制可见性的Django投票系统。
领取专属 10元无门槛券
手把手带您无忧上云