我正在努力思考如何在我正在编写的 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/