Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Итерация по разным наборам значений для значений модели в одной форме [RSS Feed]

#1 Июль 26, 2019 22:04:09

camaradaVinogrado
Зарегистрирован: 2019-03-29
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Итерация по разным наборам значений для значений модели в одной форме

Создаю простой тест: набор вопросов, для каждого свой набор ответов, для выбора одного из ответов по каждому вопросу. Вроде такого:

Question 1:

answer1 *
answer2 *

Question 2:

answer3 *
answer4 *

 # models.py
class Question(models.Model):
    question_name = models.CharField(max_length=100)
    question_text = models.TextField()
    def __str__(self):
            return self.question_text
class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.TextField()
    value = models.DecimalField(max_digits=5, decimal_places=2)
    def __str__(self):
            return self.choice_text

Последняя попытка в духе:

 # forms.py
class ChoiceTextForm(forms.Form):
    item_field = forms.ModelChoiceField(queryset=Choice.objects.none())
    def __init__(self, question_id):
        super(ChoiceTextForm, self).__init__()
        self.fields['item_field'].queryset = Choice.objects.filter(question=question_id)
# views.py
def wvs_point_test(request):
    formset = forms.inlineformset_factory(Question, 
        Choice, form=ChoiceTextForm, fields='choice_text', extra=0)
    question_id = 1
    for form in formset:
        if request.method == 'POST':
            for question in Question.objects.all():
                form = ChoiceTextForm(question_id, request.POST)
                question_id += 1
        else:
            for question in Question.objects.all():
                form = ChoiceTextForm(question_id)
                question_id += 1
    return render(
        request,
        'wvs_point/wvs_point_test.html', context={'formset': formset})
# html
<form action="{% url 'wvs_point_result' %}" method="post">
{% csrf_token %}
{{ formset }}
</form>

Выдает “TypeError: ‘type’ object is not iterable” насчет “for form in formset:”. Дайте наводку, пожалуйста - никак не могу разобраться, как реализовать такую вроде бы нехитрую задачу.

Отредактировано camaradaVinogrado (Июль 26, 2019 22:06:09)

Офлайн

#2 Июль 28, 2019 02:17:59

camaradaVinogrado
Зарегистрирован: 2019-03-29
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Итерация по разным наборам значений для значений модели в одной форме

Перемудрил. Вывод решается просто HTML'ем с подтягом значений из БД.

Офлайн

  • Начало
  • » Django
  • » Итерация по разным наборам значений для значений модели в одной форме[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version