python - Django 表单集 : make first required?

标签 python django django-forms

这些表单集表现出的正是我想要的相反行为。

我的 View 是这样设置的:

def post(request): # TODO: handle vehicle formset
    VehicleFormSetFactory = formset_factory(VehicleForm, extra=1)
    if request.POST:
        vehicles_formset = VehicleFormSetFactory(request.POST)
    else:
        vehicles_formset = VehicleFormSetFactory()

我的模板如下所示:

    <div id="vehicle_forms">
        {{ vehicles_formset.management_form }}
        {% for form in vehicles_formset.forms %}
            <h4>Vehicle {{forloop.counter}}</h4>
            <table>
                {% include "form.html" %}
            </table>
        {% endfor %}
    </div>

这样,它最初只生成 1 个表单,就像我想要的那样。但我希望需要一份表格!

当我使用 JavaScript 和 vehicles_formset.empty_form 动态添加空白表单时,所有这些额外的表单都是必需的,这是我不想要的。

来自文档:

The formset is smart enough to ignore extra forms that were not changed.

这是第一个表单展示的行为(不是我想要的),但不是额外表单展示的行为(我想要的)。

我可以更改一些属性以至少使 一个 表单成为必需的吗?

最佳答案

找到更好的解决方案:

class RequiredFormSet(BaseFormSet):
    def __init__(self, *args, **kwargs):
        super(RequiredFormSet, self).__init__(*args, **kwargs)
        for form in self.forms:
            form.empty_permitted = False

然后像这样创建您的表单集:

MyFormSet = formset_factory(MyForm, formset=RequiredFormSet)

真的不知道为什么这不是一个开始的选项......但是,无论如何。我花了几个小时才弄明白。

这将使所有表格成为必需的。您可以通过将 self.forms[0].empty_permitted 设置为 False 来制作所需的第一个。

关于python - Django 表单集 : make first required?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2406537/

相关文章:

python - 正面回顾与非捕获组 : different behaviuor

python - DRF 不会将原始 JSON 字符串发送到浏览器。它返回一个 JSON 字符串,想要绕过调用 json.load

python - 在 Django 中使用 clean() 方法

django - 从 form.save 访问请求对象

python - 使用 IN 和 python 列表构建 SQL 查询字符串

python - 如何选择PyMongo唯一的唯一记录?

python - 导入错误 : No module named 'secrets' - python manage. py 在拉入 Digital Ocean 后无法正常工作

javascript - 使用 React 和 Django 处理许多 html 文件

python - Django:未找到字段?

python - 向量化内存函数