热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

当有多个可能的选择时,防止重复投票?-Preventduplicatevotingwhenthere'smorethanonepossibleselection?

ImtryingtosetupavotingsysteminusingDjangothatlimitsaregisteredusertovotingonlyon

I'm trying to set up a voting system in using Django that limits a registered user to voting only once on a single vote (despite there being multiple options available agree/strongly agree/disagree). So far, I've been able to set up a system where they can't make the same exact vote (so they can't vote "agree" twice), but they can change their vote and it still goes through (so they can vote "agree" and then vote again as "disagree"). I want them to be limited to one vote per topic, and I can't quite figure out how to tweak my code to accomplish this. Here is my view:

我正在尝试建立一个使用Django的投票系统,限制注册用户在一次投票时只投票一次(尽管有多个选项可用/非常同意/不同意)。到目前为止,我已经能够建立一个他们无法进行同样投票的系统(所以他们不能投票“同意”两次),但是他们可以改变他们的投票并且它仍然可以通过(所以他们可以投票“同意”,然后再次投票为“不同意”)。我希望他们每个主题限制为一票,而我无法弄清楚如何调整我的代码来实现这一目标。这是我的观点:

def vote(request, prediction_id):
    prediction = get_object_or_404(Prediction, pk=prediction_id)
    selected_choice = prediction.choice_set.get(pk=request.POST['choice'])

    if Voter.objects.filter(prediction=prediction, choice=selected_choice, user_id=request.user.id).exists():

        return render(request, 'predictions/detail.html', {
            'prediction': prediction,
            'error_message': "Sorry, but you have already voted."
        })

    else:

        selected_choice.votes += 1
        selected_choice.save()
        Voter.objects.create(prediction=prediction, choice=selected_choice, user_id=request.user.id)

    return HttpResponseRedirect(reverse('predictions:results', args=(prediction.id,)))

and here are my models:

这是我的模特:

class Prediction(models.Model):
    prediction_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')
    # ...
    def __str__(self):
        return self.prediction_text

class Choice(models.Model):
    prediction = models.ForeignKey(Prediction, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)
    def __str__(self):
        return self.choice_text

class Voter(models.Model):
    user = models.ForeignKey(User)
    choice = models.ForeignKey(Choice)
    prediction = models.ForeignKey(Prediction)

1 个解决方案

#1


0  

if Voter.objects.filter(prediction=prediction, user_id=request.user.id).exists()

This line code say if this user have voted in any choice.

此行代码表示此用户是否已选择投票。

If i can understanted, the class Prediction is the "question". So other solution is:

如果我可以理解,那么预测类就是“问题”。所以其他解决方案是:

class Voter(models.Model):
    user = models.ForeignKey(User)
    choice = models.ForeignKey(Choice)
    prediction = models.ForeignKey(Prediction)

Meta:
    unique_together = (("driver", "prediction"),)

推荐阅读
  • 本文探讨了使用Python实现监控信息收集的方法,涵盖从基础的日志记录到复杂的系统运维解决方案,旨在帮助开发者和运维人员提升工作效率。 ... [详细]
  • 在Django中提交表单时遇到值错误问题如何解决?
    在Django项目中,当用户提交包含多个选择目标的表单时,可能会遇到值错误问题。本文将探讨如何通过优化表单处理逻辑和验证机制来有效解决这一问题,确保表单数据的准确性和完整性。 ... [详细]
  • 拖拉切割直线 ... [详细]
  • 本文介绍了一种算法,用于在一个给定的二叉树中找到一个节点,该节点的子树包含最大数量的值小于该节点的节点。如果存在多个符合条件的节点,可以选择任意一个。 ... [详细]
  • 本文档详细介绍了如何在 Python 中进行文件和目录的基本操作,包括文件的打开、关闭、读取、写入、复制以及文件和目录的创建、删除和重命名等。 ... [详细]
  • BeautifulSoup4 是一个功能强大的HTML和XML解析库,它能够帮助开发者轻松地从网页中提取信息。本文将介绍BeautifulSoup4的基本功能、安装方法、与其他解析工具的对比以及简单的使用示例。 ... [详细]
  • 深入解析Django CBV模型的源码运行机制
    本文详细探讨了Django CBV(Class-Based Views)模型的源码运行流程,通过具体的示例代码和详细的解释,帮助读者更好地理解和应用这一强大的功能。 ... [详细]
  • 本文详细介绍了如何在 Django 项目中使用 Admin 管理后台,包括创建超级用户、启动项目、管理数据模型和修改用户密码等步骤。 ... [详细]
  • 本文深入解析了Django框架中的MVT(Model-View-Template)设计模式,详细阐述了其工作原理和应用流程。通过分析URL模式、视图、模型和模板等关键组件,读者将全面理解Django应用程序的架构体系,掌握如何高效地构建和管理Web应用。 ... [详细]
  • DRF框架中Serializer反序列化验证机制详解:深入探讨Validators的应用与优化
    在DRF框架的反序列化验证机制中,除了基本的字段类型和长度校验外,还常常需要进行更为复杂的条件限制校验。通过引入`validators`模块,可以实现自定义校验逻辑,如唯一字段校验等。本文将详细探讨`validators`的使用方法及其优化策略,帮助开发者更好地理解和应用这一重要功能。 ... [详细]
  • 在Ubuntu系统中配置Python环境变量是确保项目顺利运行的关键步骤。本文介绍了如何将Windows上的Django项目迁移到Ubuntu,并解决因虚拟环境导致的模块缺失问题。通过详细的操作指南,帮助读者正确配置虚拟环境,确保所有第三方库都能被正确识别和使用。此外,还提供了一些实用的技巧,如如何检查环境变量配置是否正确,以及如何在多个虚拟环境之间切换。 ... [详细]
  • 深入解析 Django 中用户模型的自定义方法与技巧 ... [详细]
  • 在生产环境中进行高效部署与优化 ... [详细]
  • Django框架下的对象关系映射(ORM)详解
    在Django框架中,对象关系映射(ORM)技术是解决面向对象编程与关系型数据库之间不兼容问题的关键工具。通过将数据库表结构映射到Python类,ORM使得开发者能够以面向对象的方式操作数据库,从而简化了数据访问和管理的复杂性。这种技术不仅提高了代码的可读性和可维护性,还增强了应用程序的灵活性和扩展性。 ... [详细]
  • 本文介绍如何使用Python编程语言合并字典中具有相同集合值的键,并提供两种实现方法。 ... [详细]
author-avatar
mobiledu2502900677
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有