python - Django中用于投票应用程序的数据库结构

标签 python mysql django

我正在努力思考如何在我正在编写的 Django webapp 中构建我的数据库表。我是网络开发的新手,但这是我第一次尝试使用数据库,如果这是一个愚蠢的问题,请多多包涵。

该网络应用程序遍历学院颁发的每一个奥斯卡奖,并允许用户选择一些(不同的)提名中的哪一个将赢得奥斯卡奖。来自每个单独 session 的数据将通过访问像 [url].com/answers/[unique id] 这样的 url 公开可用。总体数据也将在结果页面上提供。所以我开始编写我的模型文件,这是我目前所拥有的:

    from django.db import models

    class Nominee(models.Model):
      award = models.CharField(max_length=50)
      title = models.CharField(max_length=50)
      key = modelsCharField(max_length=50)
      subtitle = models.CharField(max_length=50)
      numVotes = models.IntegerField()

    class Session(models.Model):
      id = models.IntegerField() # unique id of visitor
      bpictureVote = models.ForeignKey(Nominee, related_name = 'nom')
      bactorVote = models.ForeignKey(Nominee, related_name = 'nom')
      # ... for each award

我本来想拥有

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

在 Nominee 的开头,

    award = models.ForeignKey(Award, related_name = 'award')

但我不明白为什么这会比让奖项成为被提名人类(class)的一部分更好。

这真的只是一个开始,因为我有点卡住了。我在正确的轨道上吗?我应该完全不同地做这件事吗(我可能应该……)?有什么想法吗?

谢谢!

最佳答案

你走在正确的轨道上。

您需要一个单独的 Award 类,以避免每次创建 Nominee 时都必须输入奖项的名称。通过使用 ForeignKey 引用,您可以确保您可以安全地重命名您的奖项,添加有关该奖项的其他信息(假设将来您决定为每个奖项提供一个单独的页面,其中包含描述和被提名人列表),您还可以避免一组不同的拼写和拼写错误可能会导致错误(“最佳工程师奖”和“最佳工程师奖”)。这也很有意义 - 您的应用程序操作一组对象:用户 session 、提名人和奖项。

一些不相关的注释:

  • 您不需要明确的 Session.id 字段,django ORM 会为您创建它。
  • 属性名称必须是 name_with_underscores,而不是 camelCase。
  • 参数列表中“=”两边没有空格:models.ForeignKey(Nominee, related_name='nom')
  • 4 个空格而不是 2 个(除非另有明确说明)。

关于python - Django中用于投票应用程序的数据库结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21196753/

相关文章:

mysql - 在跨表查询上按 desc 和 group by 排序

python - Django、JSONField、Postgres 和 F() 对象比较

python - 有太多 uwsgi OSError 消息

python递归不适用于yield

Python:修改属性值

python - 通过代理使用 urllib2

python - 无法从我的对象中提取日期

python - 如何使用打开的文件句柄中断 Python 生成器

MYSQL 将 substring_index 中的最大值加 1

mysql - 如何在Spring项目中从mysql执行命令CREATE USER?