1

У меня есть приложение для опроса с полем ManytoMany в модели опроса.django views - получить значения поля ManyToMany

Я хотел получить значения поля выбора (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** 

ответ

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 

Примечание: Если каждый объект опрос всегда имеет ровно два варианта, вы можете также использовать 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) 

Таким образом, это не потребуется третья таблица, чтобы отслеживать отношения между выборами и опросами, что, в свою очередь, было бы более эффективным.

Наконец, вы должны смотреть на Джанго документации, что делает большую работу при объяснении всего этого: https://docs.djangoproject.com/en/1.7/topics/db/examples/many_to_many/

1

Небольшое изменение solution..as в 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 

Используйте это, если данные опроса не являются большими enough..Later вы можете получить доступ к выбору с

polldict[id]['choice_1'] 

Не большой материал, но небольшая логика для обхода различных опросов и вариантов.

Смежные вопросы