【问题标题】:How do I handle multiple forms in Django with many-to-many relationship如何在 Django 中处理具有多对多关系的多个表单
【发布时间】:2011-06-18 08:19:59
【问题描述】:

在我看来,我有一个预订信息,在预订中我与预订中的团体规模和年龄存在多对多关系。班级(小组规模、年龄)具有多对多的关系。预订完成后,我希望用户能够添加课程详细信息。所以一个预订可以有很多课程。

我尝试过使用inline_formset_factory,但它不喜欢多对多关系,并且根据文档inline_formset_factoryForeignKey 关系(我在这里很容易出错)。另外,我似乎需要一个预订实例才能使用inline_formset_factory(尽管我可能又错了)

所以回顾一下,我是 django 的新手,我正在尝试通过预订表格中的表格将许多课程添加到预订中。我只是不确定我是否走在正确的轨道上。

我希望这是有道理的。提前致谢。

【问题讨论】:

    标签: django django-views django-forms


    【解决方案1】:

    与其自己创建表单,不如使用ModelForm 将表单绑定到应用程序中的模型,自动创建保存或编辑与其链接的模型实例所需的字段类型。


    Booking 实例添加到数据库的最简单方法是使用ModelForm

    from django.db import models
    from django.forms import ModelForm
    
    class Booking(models.Model):
        ...
    
    class BookingForm(ModelForm):
        class Meta:
            model = Booking
    

    有关ModelForms 的更多信息,请参阅the Django docs。接下来在您的视图中创建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 文档中的 using a form in a view。接下来在您的模板中,您可以像这样简单地打印整个表单(以及所有相关字段):

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

    有关模板中表单的更多信息,请参阅displaying a form using a template

    【讨论】:

    • 谢谢马库斯。但我已经在我的表单中使用ModelForm。也许我没有正确解释自己。我有一个预订表格。但是在表单中我需要添加许多类(它本身就是一个表单)我希望用一个表单来做到这一点。而不是 2 个单独的
    • 我明白了,很遗憾我对这种内联创建没有太多经验。
    猜你喜欢
    • 1970-01-01
    • 2021-01-28
    • 1970-01-01
    • 2010-10-14
    • 2014-06-21
    • 2021-01-13
    • 2014-01-29
    • 2011-06-27
    • 2015-03-19
    相关资源
    最近更新 更多