【发布时间】:2017-11-07 17:37:05
【问题描述】:
我正在尝试创建一个“添加用户”功能,它将简单地将您从下拉列表中选择的用户添加为您的连接。我正在使用 Django Forms 中的 ModelChoiceField,以便我可以从下拉列表中的 User 模型中获取现有用户。
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 index(request):
user_list = User.objects.exclude(username=request.user)
return render(request, 'chat/index.html', {'user_list': user_list})
现在我只是打印表单以查看输出
@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'),]
目前呈现的方式是:我有我的主索引页面,我没有看到任何下拉菜单,即,
当我单击提交按钮时,它会将我移动到 index/add_user,在那里我会看到一个带有用户的下拉列表(带有警告“此字段是必需的)和一个提交按钮。
最后,当我在这个新页面中选择一个用户并点击提交时,最终会打印出我想要的表单。
我想要什么,在索引页面本身中包含带有下拉菜单的完整表单,并在我提交表单时保留在那里。然后我将挂钩以显示用户他们在该表单本身下方添加的用户(“打印”仅用于调试目的 - 虽然不是我听说过的好方法)。 我知道发布请求必须转到 add_user 页面,我可以从那里重定向回来。在过去的 6 个小时里,我尝试了各种替代方案,但没有任何效果。道歉很长,尽可能多地提供信息。非常感谢你们。你真棒。
编辑 现在已经在索引页面中呈现表单(来自@fazil-zaid 的建议),但问题仍然存在,因为最初索引上仅出现“提交”按钮,除非我点击提交,然后出现下拉和提交。同样,在第二次单击时,表单被提交。
Edit-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 请求不发送任何数据(可以理解)。
【问题讨论】:
标签: django python-2.7 django-forms http-post