对Django选举的结果进行建模

时间:2016-04-12 17:59:25

标签: python django web django-models

我试图弄清楚如何在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的新手,因此几乎可以肯定该解决方案非常简单和技术性

1 个答案:

答案 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