django投票应用程序 - 不同模型之间的关系

时间:2015-02-17 05:48:47

标签: django django-models django-admin

我有一个简单的投票应用程序,有大多数投票应用程序有2个模型轮询和选择。

民意调查模型包含以下字段:

  1. 问题 - charField
  2. pub_date - 日期和时间
  3. end_date - 日期和时间
  4. 此外,每个民意调查都有2个选择。

    选择模型包含以下字段:

    1. 民意调查 - ForeignKey
    2. 选择 - ImageField
    3. 投票 - 整数
    4. 我有另一个模特人物。人员模型中的2人之间进行了民意调查。

      人物模型:

      1. 姓名 - Charfield
      2. age - charfield
      3. image - imagefield ...
      4. 我想在管理员中完成以下操作;

        1. 创建投票(这是一个简单的投诉)
        2. 创建选择 - 从人物模型中获取图像而不是上传新内容。
        3. 如果针对民意调查添加了选项,则该选择的选择和投票会自动显示为民意调查中的只读字段。
        4. 人物模型显示有多少民意调查参与其中,以及有多少民意调查获胜和失败。
        5. 点2,3和4是我正在努力的。请保持你的回答简单,我是新手。

          class Poll(models.Model):
              question = models.CharField(max_length=250)
              pub_date = models.DateTimeField()
              end_date = models.DateTimeField()
          
          class Choice(models.Model):
              Poll = models.ForeignKey(Poll)
              choice = models.ImageField(upload_to="choice")
              vote = models.IntegerField()
          
          class Person(models.Model):
              name = models.CharField(max_length=200)
              age = models.IntegerField(blank=True, null=True)
              image = models.ImageField(upload_to='img')
          

          如果问题不明确,请告诉我。

1 个答案:

答案 0 :(得分:0)

我不清楚你想要达到什么目标。暗示你想要参考两个图像来回答这个问题我将使用以下模型:

class Poll(models.Model):
    question = models.CharField(max_length=250)
    person1 = models.ForeignKey(Person,related_name ="+") #"+" to block reverse reference
    person2 = models.ForeignKey(Person,related_name ="+")
    pub_date = models.DateTimeField()
    end_date = models.DateTimeField()    

class Choice(models.Model):
    Poll = models.ForeignKey(Poll)
    choice = models.ForeignKey(Person)
    vote = models.IntegerField()

class Person(models.Model):
    name = models.CharField(max_length=200)
    age = models.IntegerField(blank=True, null=True)
    image = models.ImageField(upload_to='img')
def votes_sum(self):
        return len( self.choice_set.all()) #this returns all votes

在管理员中,您可以将选择模型作为内联添加到民意调查中。

class ChoiceInline(admin.TabularInline):
    model = Choice
    extra=1

class ProjectAdmin(admin.ModelAdmin):
    inlines = [ChoiceInline]

class VotesAdmin(admin.ModelAdmin):
    list_display = ['name', 'votes_sum']
    readonly_fields = ('votes_sum',)

我没有测试这段代码,但你应该知道如何做到这一点。