Django表格问题

2024-06-16 14:58:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我没有一个例子,因为我现在没有做任何相关的工作,但在阅读了关于表单集的文档之后,我仍然很好奇:

一个视图同时发布多个不同的模型表单(而不是一个组合表单,因为您不能同时发布多个表单,但缺乏更好的解释……),其中一些是单个模型表单,而另一些是一个或多个表单集(例如Person,他的1 Address,以及他的一个或多个Pet对象),就像Django处理TabularInline。内联线已经在Django使用了一些时间,所以我怀疑有比简单地复制/粘贴admin/options.py中的内容更好的实践,不是吗?你知道吗

提前谢谢


Tags: 对象django文档模型视图表单admin粘贴
1条回答
网友
1楼 · 发布于 2024-06-16 14:58:38

你应该:

  • 确保您正在使用事务(因此,请确保它们已打开,并且您在MyISAM表中使用的不是MySQL)。一直都是这样,真的,但现在更是这样。:)

  • 使用多个forms.Form/forms.ModelForm对象,这些对象组合在一个HTML <form>元素中,例如。。。

Python:

from django import forms

class FormA(forms.ModelForm):
    [...]

class FormB(forms.ModelForm):
    [...]

HTML格式:

<form method="post" action="/path/to/view/">
    {% csrf_token %}

    {{ form_a }}
    {{ form_b }}

    <input type="submit" value="Submit Form" />
</form>

然后,在处理表单时,只需同时处理这两个表单,并确保这两个表单都是有效的,以便在成功案例中实际完成视图。你知道吗

from django.db import transaction
from django.http import HttpResponseRedirect
from django.template.response import TemplateResponse
from myapp.forms import FormA, FormB

@transaction.commit_on_success
def present_forms_to_user(request):
    if request.method == 'POST':
        form_a = FormA(request.POST)
        form_b = FormB(request.POST)

        if form_a.is_valid() and form_b.is_valid():
            # processing code

            return HttpResponseRedirect('/path/to/thank/you/page/')
    else:
        form_a = FormA()
        form_b = FormB()

    return TemplateResponse(request, 'templates/eggs.html', {
        'form_a': form_a,
        'form_b': form_b,
    })

作为免责声明,请记住这是一个基本的示例存根,而不是盲目复制。您的最终用例可能略有不同,这很好。你知道吗

相关问题 更多 >