Django - Работа с несколькими формами

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

Только, чтобы помочь Вам вообразить, что моя проблема, я собираюсь использовать django модели в качестве примера:

from django.db import models

class Poll(models.Model):
    question = models.CharField(max_length=200)
    pub_date = models.DateTimeField()

class Choice(models.Model):
    poll = models.ForeignKey(Poll)
    choice = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

Теперь, предположите, что я уже сделал классы формы:

from django import forms
from mysite.polls.models import Poll, Choice

class PollForm(forms.ModelForm):
    class Meta:
        model = Poll

class ChoiceForm(forms.ModelForm):
    class Meta:
        model = Choice
        exclude = ('poll',) 

Таким образом, то, что я хочу сделать, должно иметь несколько экземпляров формы модели Poll и Choice на единственной странице, но ум, что эти модели могут быть повторены также:

<form action="{{url}}" method="post">
    {{pollform}}
    {{choiceform}}
    {{pollform}}
</form>

Поскольку Вы видите, что существует две формы Опроса и одна форма Выбора, но формы Опроса разделяются формой Выбора. Мне действительно нужно это, формы сохраняют свой порядок на странице, так немного более твердо использовать formsets.

Проблема, которую я получил, то, что значения, который прибывает в сообщение, являются всеми именем "ответ", таким образом, я получаю список всех элементов от всех форм именем "ответ", и я не могу определить, которые принадлежат каждой форме.

Не знайте, получает ли это объяснение четкое представление о моей проблеме. Какие-либо идеи сделать этот материал?

Спасибо за помощь!

PD: не обращайте внимание на отношение между Опросом и Выбором, те модели являются просто для уточнения problen, таким образом, отношение не имеет значения вообще.

26
задан FernandoEscher 3 March 2010 в 19:16
поделиться

1 ответ

Используйте префикс kwarg

Вы можете объявить свою форму как:

form = MyFormClass(prefix='some_prefix')

, а затем, если префикс будет То же самое, обрабатывать данные как:

form = MyFormClass(request.POST, prefix='some_prefix')

Django позаботится обо всем остальном.

Таким образом, у вас может быть столько форм одного типа, сколько вы хотите на странице

55
ответ дан 28 November 2019 в 06:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: