2

我正在 Ubuntu 13.04、Python 2.7、Django 1.5、Postgres 9.2、Bootstrap 3.0 上学习 Django。我想实现教程示例 Polls 应用程序与 django-authentication 的组合。

作为我的第一次尝试,我从Django 1.5 教程中获得了 Polls 应用程序。然后我安装了django-registration 1.0这些模板以使其工作。由于我对 authentication framework的问题,我选择了该软件包进行身份验证,而不是django-allauth

现在我想集成 Polls 和 django-registration 来记录每个用户的一组结果。收集投票结果后,管理员使用 Django 管理界面运行脚本来分析结果(例如计算一些统计数据)并向所有用户的子集发送电子邮件。

我简要地看了两个现有的项目,看起来可以让我开箱即用。

  1. 使用基于模块化类的自定义视图库, Light Bird 的问卷调查应用程序过于复杂。我想让它尽可能简单,尽可能多地使用开箱即用的 Django 1.5 功能,以便于维护和初始设计。

  2. 基于 Django 的 Pinax Web 框架虽然是一个好主意,但似乎还停留在 2011 年的黑暗时代,最新的代码仅支持 Django 1.4 和 Bootstrap 2.x。入门项目看起来没有那么有用,文档也不是闪存。

基于上述情况,我似乎必须手动集成民意调查和注册。起初,我大致在想以下几点:

  • 民意调查和选择可以简化为问题的数字答案。
  • 在数据库级别,我们需要一个单独的表。
  • 主键将是用户 ID。
  • 每列将存储一个答案。
  • 我猜这需要一个class PollsResultsin model.py,其中包括将主键定义为User,它应该通过 django-registration 存在。
  • 究竟如何做到这一点以及接下来的事情现在对我来说有点模糊。

我确信以上对于 Django 开发人员来说是一个简单的练习。任何人都可以给我一些开始的提示,甚至更好的做类似事情的现有项目吗?

4

1 回答 1

0

看起来您略微低估了使用 django 等框架的威力。例如,您不需要过多担心数据库中的表或它们的主键,因为 django 的对象关系映射器 (ORM) 会为您处理很多事情。

如果要在 django 中连接两个模型(数据库表),可以使用如下外键

class ThingOne(models.Model):
    name = models.CharField(max_length=50)

class ThingTwo(models.Model):
    thing_one = models.ForeignKey('ThingOne')

我的 ForeignKey 中“ThingOne”周围的引号实际上是不必要的,因为ThingOne模型已经定义,但我还是喜欢使用引号,因为这意味着您的 ForeignKeys 也适用于下面定义的模型(在您的代码中)链接到它们的模型。

因此,您只需在 Polls 和 User 模型之间添加关系。如果一个用户可能有很多投票结果,您可能应该使用ManyToManyField而不是 ForeignKey,但原理是相同的。这应该足以让你开始。

于 2013-10-17T08:36:17.140 回答