Как мне обрабатывать несколько форм в Django с отношением многие ко многим - PullRequest
0 голосов
/ 31 января 2011

На мой взгляд, у меня есть информация о бронировании, в бронировании у меня отношение «многие ко многим» с размером группы в бронировании и возрастом. Класс (размер группы, возраст) имеет отношение «многие ко многим». Когда бронирование будет сделано, я бы хотел, чтобы пользователь мог добавить информацию о классе. Так что в бронировании может быть много классов.

Я пытался использовать inline_formset_factory, но ему не понравилось отношение «многие ко многим», и согласно документам inline_formset_factory относится к отношению ForeignKey (я могу легко ошибаться здесь) Также мне кажется, что мне нужен экземпляр бронирования, прежде чем я смогу использовать inline_formset_factory (хотя, опять же, я могу ошибаться)

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

Надеюсь, это имело смысл. Заранее спасибо.

1 Ответ

1 голос
/ 31 января 2011

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


Самый простой способ добавить экземпляр Booking в базу данных - использовать ModelForm:

from django.db import models
from django.forms import ModelForm

class Booking(models.Model):
    ...

class BookingForm(ModelForm):
    class Meta:
        model = Booking

См. документы Django для получения дополнительной информации о ModelForm s. Далее на ваш взгляд создайте экземпляр BookingForm, передав его в контексте вашего шаблона:

def your_view(request):
    if request.method == 'POST':
        form = BookingForm(request.POST)
        if form.is_valid():
            booking = form.save()
            return HttpResponseRedirect('/success/url/')
    else:
        form = BookingForm()

    return direct_to_template(request, 'your/template.html', {
        'form': form
    })

Для получения дополнительной информации о работе с формами в ваших представлениях см. Использование формы в представлении в документации Django. Далее в вашем шаблоне вы можете просто напечатать всю форму (и все соответствующие поля) следующим образом:

<form action="" method="post">
    {{ form.as_p }}
    <input type="submit" name="submit" value="submit">
</form>

См. Отображение формы с использованием шаблона для получения дополнительной информации о формах в шаблонах.

...