我在民意调查模型中有一个带有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**
答案 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']
不是一个大的东西,而是一个小的逻辑,以解决各种民意调查和选项。