django views - 获取ManyToMany字段的值

时间:2015-02-08 19:06:15

标签: python django django-models django-templates django-views

我在民意调查模型中有一个带有ManytoMany字段的民意调查应用程序。

我想检索视图中的choice(ManyToMany)字段的值。

models.py

class Poll(models.Model):
    question = models.CharField(max_length=250)
    pub_date = models.DateTimeField()
    end_date = models.DateTimeField(blank=True, null=True)
    choice= models.ManyToManyField(Choice)

def __unicode__(self):
  return smart_unicode(self.question)

class Choice(models.Model):
    name = models.CharField(max_length=50)
    photo = models.ImageField(upload_to="img")
    rating = models.CharField(max_length=10)

def __unicode__(self):
  return smart_unicode(self.name)

views.py 每个投票中有2个选项,我想将这些选项中的每一个分配给2个单独的变量,但不知道如何进行。

def polling(request)
    try:
        choices = Poll.objects.all()
        choice_1 = **assign 1st ManyToMany Field value** 
        choice_2 = **assign 2nd ManyToMany Field value** 

2 个答案:

答案 0 :(得分:1)

像这样的东西,我想象

def polling(request):
    for poll in Poll.objects.all():
        choice_1 = poll.choice.all()[0]
        choice_2 = poll.choice.all()[1]

def polling(request):
    for poll in Poll.objects.all():
        for choice in poll.choice.all():
            # Do something with choice

注意:如果每个轮询对象总是有2个选项,那么您也可以使用foreignkeys代替

class Poll(models.Model):
    question = models.CharField(max_length=250)
    pub_date = models.DateTimeField()
    end_date = models.DateTimeField(blank=True, null=True)
    choice_one = models.ForeignField(Choice)
    choice_two = models.ForeignField(Choice)

这样,它就不需要第三张表来跟踪选择和民意调查之间的关系,这反过来会更有效率。

最后,你应该看看django文档,它在解释所有这些方面做得很好:https://docs.djangoproject.com/en/1.7/topics/db/examples/many_to_many/

答案 1 :(得分:1)

对Dellkan解决方案的一个小改动......最后,choice_1和choice_2将成为循环中轮询的最后一个条目

polldict={}
def polling(request):
    for poll in Poll.objects.all():
        index=poll.id
        choicedict={}
        choicedict['choice_1'] = poll.choice.all()[0]
        choicedict['choice_2'] = poll.choice.all()[1]
        polldict[index]=choicedict

如果轮询条目不够大,请使用此选项。稍后您可以使用

访问该选项
polldict[id]['choice_1']

不是一个大的东西,而是一个小的逻辑,以解决各种民意调查和选项。