Джанго - Работа с несколькими формами - PullRequest
23 голосов
/ 03 марта 2010

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

Просто чтобы помочь вам представить, в чем заключается моя проблема, я собираюсь использовать примеры моделей 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 and Choice, но помните, что эти модели тоже можно повторить:

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

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

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

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

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

PD: не обращайте внимания на связь между опросом и выбором, эти модели просто для того, чтобы прояснить проблему, поэтому связь вообще не имеет значения.

1 Ответ

54 голосов
/ 03 марта 2010

Используйте prefix kwarg

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

form = MyFormClass(prefix='some_prefix')

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

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

Джанго позаботится об остальном.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...