【发布时间】:2018-06-18 15:10:41
【问题描述】:
我的views.py 中有一些非常简单的视图。
class IndexView(generic.ListView):
template_name = 'voting/index.html'
context_object_name = 'latest_question_list'
def get_queryset(self):
"""
Return the last five published questions (not including those set to be
published in the future).
"""
return Poll.objects.filter(
pub_date__lte=timezone.now()
).order_by('-pub_date')[:5]
class DetailView(generic.DetailView):
model = Poll
template_name = 'voting/detail.html'
context_object_name = 'question'
def get_queryset(self):
"""
Excludes any questions that aren't published yet.
"""
return Poll.objects.filter(pub_date__lte=timezone.now())
class ResultsView(generic.DetailView):
model = Poll
template_name = 'voting/results.html'
context_object_name = 'question'
我还创建了一个model,我在其中存储了哪些用户被邀请参加哪些投票以及其他一些数据。
class EligibleVoters(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
poll = models.ForeignKey(Poll, on_delete=models.CASCADE, null=True)
encrypted_keypart = models.BinaryField(max_length=200, blank=True)
decrypted_keypart = models.BinaryField(max_length=200, blank=True)
class Meta:
unique_together = ["user", "poll"]
我想限制未受邀参加投票的用户查看这些投票。
我认为我想要为每个视图做这样的事情,但我不确定这是否是正确的方法。
class DetailView(generic.DetailView):
model = Poll
template_name = 'voting/detail.html'
context_object_name = 'question'
def get_queryset(self):
"""
Excludes any questions that aren't published yet.
"""
if EligibleVoters.objects.filter(poll=Poll.objects.id, user=self.request.user.id).exists():
return Poll.objects.filter(pub_date__lte=timezone.now())
else:
return render('voting/somethingsomething.html')
})
我应该以这种方式限制对特定民意调查的访问吗?此外,上面的代码并没有真正起作用并给出了一些错误,但我不确定是否应该继续并尝试以这种方式修复它。
【问题讨论】:
标签: django django-models django-views django-permissions