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
在