我试图弄清楚如何在Django中为选举建模。我有一个模型Candidate
。必须有两个候选人,所以定义如下:
class Candidate(models.Model):
name = models.CharField(max_length=50)
surname = models.CharField(max_length=50)
def __str__(self):
return self.name + ' ' + self.surname
def clean(self):
if (len(Candidate.objects.all()) > 1):
raise ValidationError(
"There are two candidates already"
)
我希望有一个模型CountyResult
,其中包括以下字段:县(外国),居民人数,有资格投票的居民人数等,以及该县选举的最终结果。
我希望能够在admin
网站上插入选举结果。
我的问题是:如何在Candidate -> votes
模型中实现CountyResult
映射?我只是考虑存储值first_candidate_votes, second_candidate_votes
,但这显然不是一个很好的解决方案,因为我希望能够删除一个候选人。
我还在考虑添加一个带有外键SingleResult
的{{1}}模型,并以某种方式将其放入'在candidate
类中,但在Django中没有二对一的关系
我很感激任何提示。我是Django的新手,因此几乎可以肯定该解决方案非常简单和技术性
答案 0 :(得分:0)
如果我理解正确的话,我最有意义的是有3个模型:候选人,县和结果。县将拥有县,居民和符合条件的选民领域。结果将有候选人和县的外键,然后是投票计数字段(如果你想保持投票统计分开,则为总数或两个字段。)
class Candidate(models.Model):
name = models.CharField(max_length=50)
surname = models.CharField(max_length=50)
class County(models.Model):
name = models.CharField(max_length=50)
population = models.IntegerField(max_length=50)
eligible_voters = models.IntegerField(max_length=50)
class Result(models.Model):
name = models.CharField(max_length=50) # you could give an election a name I suppose, i.e. 2016 primary
county = models.ForeignKey('County',)
winner = models.ForeignKey('Candidate',)
loser = models.ForeignKey('Candidate',)
total_votes = models.IntegerField(max_length=50) # break this out into other fields if you want more detail