我正在进行一个使用Django(2.2)和Python(3.7)的项目,在这个项目中,我必须为特定场景实现模型:
我有一个投票,我们有五个问题,比如:
DELIVERING VALUE
EASY TO RELEASE
FUN
HEALTH OF CODEBASE
TEAMWORK
每个问题都有下拉选项: --选择-- --有帮助的-- --没有帮助-- --灾难——
所有这些投票将属于一个组,稍后我需要执行一些聚合,以获得这些选项(如有帮助)对每个问题(如提供价值)的总票数
以下是我目前如何在Django模型中实现此场景:
来自models.py
:
class UserGroup(models.Model):
email = models.EmailField(primary_key=True)
group = models.CharField(max_length=250, default='notingroup')
def __str__(self):
return self.group
VOTE_CHOICES = (
('helpful', "helpful"),
('meh', 'meh'),
('disaster', 'disaster')
)
class VotingValues(models.Model):
value1 = models.CharField(max_length=40)
value2 = models.CharField(max_length=40)
value3 = models.CharField(max_length=40)
value4 = models.CharField(max_length=40)
value5 = models.CharField(max_length=40)
score1 = models.CharField(choices=VOTE_CHOICES, max_length=20)
score2 = models.CharField(choices=VOTE_CHOICES, max_length=20)
score3 = models.CharField(choices=VOTE_CHOICES, max_length=20)
score4 = models.CharField(choices=VOTE_CHOICES, max_length=20)
score5 = models.CharField(choices=VOTE_CHOICES, max_length=20)
user = models.EmailField(max_length=255)
group = models.CharField(max_length=250, default='notingroup')
date = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.user + ' \'s ' + 'vote in ' + self.group
有没有更好的方法来实现这个场景
我真的不喜欢把问题和答案放在同一个模型里。也许把问题放在另一个模型中更好(比如
Question
)我认为这比你的解决方案更干净,但你可以考虑更多。如果只是一次以上的回答就足够了,但如果你可能需要创建更多的调查,或多或少的问题,很明显,对于每个调查,你需要改变当前的模型或创建新的
要解决这个问题,我首先想到的是将问题和答案放在json字段或数组字段中
(请注意,我不知道聚合查询如何处理json字段,所以您可能需要查找它)
我想到的另一件事是,不要使用json字段,而是添加一个新模型来存储单个问题:
对于当前调查:为该组创建1
question_group
并添加5questions
。当用户投票给question_group
时,在vote
表中添加5行(问题组中的每个问题对应一行)相关问题 更多 >
编程相关推荐