我想创建一个“添加用户”功能,它只会增加你从下拉作为连接选择的用户。我使用ModelChoiceField从Django的形式,这样我可以从下拉我的用户模型得到的现有用户。Django表单 - 渲染形式和重定向
forms.py
from django import forms
from django.contrib.auth.models import User
class NetworkForm(forms.Form):
user_id = forms.ModelChoiceField(queryset=User.objects.all(), label='',
widget=forms.Select(attrs={'class': 'all_users'}))
views.py
现在我只是打印形式看到输出
@login_required
def add_user(request):
form = NetworkForm()
if request.method == 'POST':
form = NetworkForm(request.POST)
if form.is_valid():
print form
return redirect(request.META['HTTP_REFERER'])
errors = form.errors or None
return render(request, 'chat/index.html', {
'form': form,
'errors': errors,
})
的index.html
<div class="row">
<form action="{% url 'chat:add_user' %}" method="post">
{% csrf_token %}
{{ form.as_p }}
<button class="btn btn-warning" value="{{ user_id }}" style="float: left;">Submit</button>
</form>
</div>
urls.py
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^add_user/$', views.add_user, name='add_user'),]
它被当前呈现的方式是:我有我的主索引页面,在这里我看不到任何下拉,即
当我点击提交按钮,它让我感动到指数/ ADD_USER,在那里我得到用户下拉(带有警告“这个字段是必须的)和重新提交按钮。
最后,当我在这个新页面中选择一个用户并点击提交时,最后打印出最终我想要的表格。
我想要什么,有索引页面本身下拉的完整形式,并在我提交表单时保留在那里。我便会钩住,以显示用户,他们补充说,形式本身下方的用户(“打印”仅仅是用于调试的目的 - 不是一个好办法,我虽然听说过)。 我明白POST请求将不得不去ADD_USER页面,我也可以把从后面。过去6个小时我尝试了各种替代方法,但没有任何工作。为长期的道歉,尽可能地提供信息。非常感谢你们。你太棒了。
编辑 人员已绘制在索引页的形式(建议从@法齐尔 - 扎伊德),但问题依然存在,如只有“提交”按钮,指数出现开始,除非当我点击提交之后,出现下拉并提交。再次点击第二次,表单被提交。
编辑-2 我想到:
<form action="{% url 'chat:index' %}" method="post">{% csrf_token %}
{{ form.as_p }}
<button class="btn btn-warning" value="{{ user_id }}" style="float: left;">Submit</button>
</form>
这可能是问题的所在,按照目前的逻辑,除非用户采取形式的行动,即,点击按钮{{form.as_p }}不会出现。然后我想:
{{ form.as_p }}
<form action="{% url 'chat:index' %}" method="post">{% csrf_token %}
<button class="btn btn-warning" value="{{ user_id }}" style="float: left;">Submit</button>
</form>
依然不工作。 POST请求不会发送任何数据(可以理解)。
@ fazil-zaid不确定我是否将答案标记为答案或您的答案?你的确是一个大指针。你似乎是一个经验丰富的堆垛机,告诉我什么是准则。 – Manganese
由于缺乏来自fazil的回复,我会让我的答案成为答案,建议用户一起看看fazil和我的两个组合,然后作出最终答案。 – Manganese