Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 提交时手动呈现的Django表单集重定向问题_Python_Django_Redirect_Formset - Fatal编程技术网

Python 提交时手动呈现的Django表单集重定向问题

Python 提交时手动呈现的Django表单集重定向问题,python,django,redirect,formset,Python,Django,Redirect,Formset,我定义了以下模型: class Item(models.Model): rfid_tag = models.CharField() asset = models.OneToOneField('Assets', default=None, null=True, on_delete=models.SET_DEFAULT,) date = models.DateTime

我定义了以下模型:

class Item(models.Model):
    rfid_tag    = models.CharField()
    asset       = models.OneToOneField('Assets', default=None, null=True,
                                       on_delete=models.SET_DEFAULT,)
    date        = models.DateTimeField(name='timestamp',                     
                                       auto_now_add=True,)
...

class Assets(models.Model):
    id = models.AutoField(db_column='Id', primary_key=True)
    assettag = models.CharField(db_column='AssetTag', unique=True, max_length=10)
    assettype = models.CharField(db_column='AssetType', max_length=150)
...

    class Meta:
        managed = False
        db_table = 'Assets'
        ordering = ['assettag']

    def __str__(self):
        return f"{self.assettag}"

    def __unicode__(self):
        return f"{self.assettag}"
我为其创建了以下表单和表单集:

class ItemDeleteForm(forms.ModelForm):

    asset = forms.CharField(required=True,
                            help_text= "Item asset tag",
                            max_length=16,
                            label="AssetTag",
                            disabled=True,
                            )

    delete = forms.BooleanField(required=False,
                                label="Delete",
                                help_text='Check this box to delete the corresponding item',
                                )

    class Meta:
        model = Item
        fields = ['asset']

ItemDeleteMultiple = forms.modelformset_factory(model=Item,
                                         form=ItemDeleteForm,
                                         extra=0,
                                         )
由视图管理:

class DeleteMultipleView(generic.FormView):
    template_name = '*some html file*'
    form_class = ItemDeleteMultiple
    success_url = reverse_lazy('*app_name:url_name*')

    def form_valid(self, form):
        return super().form_valid(form)
并在模板中呈现:

{% extends "pages/base.html" %}

{% block title %}
    <title>Delete Multiple</title>
{% endblock %}

{% block content %}
    <h1>Delete Multiple Items</h1>
<br>
    <form class="ManualForm" action ="." method="POST"> {% csrf_token %}
        {{ form.management_form }}
        <table border="2">
            <tr><th colspan="3" scope="row">Select Items to Delete</th></tr>
            {% for item_form in form %}
            <tr>
                <td><label for="{{ item_form.asset.id_for_label }}">AssetTag {{forloop.counter}}:</label>
                    {% if item_form.non_field_errors %}
                        {{ item_form.non_field_errors }}
                    {% endif %}
                    {% if item_form.asset.errors %}
                        {{item_form.asset.errors}}
                    {% endif %}
                </td>
                <td>{{item_form.asset}}</td>
                <td>{{item_form.delete}}
                    {% if item_form.delete.errors %}
                        {{item_form.delete.errors}}
                    {% endif %}
                </td>
            </tr>
            {% endfor %}
        </table>
        <br>
        <input class = "btn btn-success" type="submit" value="Delete Selected" />
        <a href="{% url 'inventory:index' %}" class="btn btn-secondary">Cancel</a>
    </form>

<form class="AutoForm" action ="." method="POST"> {% csrf_token %}
    {{form.as_table}}
    <input class = "btn btn-success" type="submit" value="Delete Selected" />
    <a href="{% url 'inventory:index' %}" class="btn btn-secondary">Cancel</a>
</form>

{% endblock %}
{%extends“pages/base.html”%}
{%block title%}
删除多个
{%endblock%}
{%block content%}
删除多个项目

{%csrf_令牌%} {{form.management_form}} 选择要删除的项目 {表格%中的项目形式为%u} AssetTag{{forloop.counter}}: {%if item_form.non_field_errors%} {{item_form.non_field_errors}} {%endif%} {%if item_form.asset.errors%} {{item_form.asset.errors} {%endif%} {{item_form.asset} {{item_form.delete} {%if item_form.delete.errors%} {{item_form.delete.errors} {%endif%} {%endfor%}
{%csrf_令牌%} {{form.as_table}} {%endblock%}
当我提交AutoForm时,一切都很好。它将我带到
app\u name:url\u name
,但如果我使用手动表单,我不会被重定向。它只需清除所有数据,并用空字段重新加载表单页面

AutoForm的HTTP POST响应状态代码为302,而ManualForm的HTTP POST响应状态代码为200

我不明白模板如何影响url重定向的行为。手动呈现表单集时我做错了什么?

似乎添加了:

{% for field in item_form.hidden_fields %}
    {{field}}
{% endfor %}
{%for item_form%}下,
将解决此问题

我不太明白,因为:

在隐藏和可见字段上循环

如果您在模板中手动布局表单,而不是 根据Django的默认表单布局,您可能希望 字段与非隐藏字段不同。对于 例如,因为隐藏字段不显示任何内容,所以将 字段“旁边”的消息可能会给您的用户带来混乱–因此 应以不同方式处理这些字段的错误

我只是觉得这是关于错误的,所以我不在乎。但关于表单,它首先要说的是:

例如,Django管理员的登录表单包含几个 元素:用户名为type=“text”中的一个,用户名为 type=“password”表示密码,type=“submit”表示密码 “登录”按钮。它还包含一些隐藏的文本字段 用户看不到,Django用它来决定下一步做什么

它还告诉浏览器表单数据应该发送到URL 在
的操作属性-/admin/-中指定,并且 应使用方法指定的HTTP机制发送 属性-post


也许它会帮助其他人。

请发布您的手册视图form@bmons这是同样的观点。两个表单位于同一模板中。