我试图将通过 ModelChoiceField 获得的对象通过url和views参数发送到视图中,但我认为这不是正确的方法。我不知道我是否必须使用 POST 或 GET 方法。
当我使用 GET 方法时,该对象显示在url中,但视图保持不变。 使用 POST 方法,django发送有关参数的错误消息。
编辑:我不记得确切的消息,暂时无法恢复,但是我记得他们说了类似Reverse for argument not found
我的表格
class IndividuForm(forms.Form):
individu = forms.ModelChoiceField(queryset=Individu.objects.all()
这是带有表单的视图
def index(request):
individu_form = IndividuForm(request.GET or None)
if individu_form.is_valid():
individu_id = individu_form.cleaned_data['individu'].id
HttpResponseRedirect('%i/raison/' % individu_id)
return render(request, 'derog_bv/index.html', {'individu_form':individu_form})
显示表单的模板
<form action="{% url 'index' <!-- Errors when I put parameters here --> %} method="<!-- GET or POST -->">
{% csrf_token %}
{{ form }}
<input type="submit">Suivant</input>
</form>
我要获取对象的视图
def raison(request, """ error with this parameter : individu_id"""):
individu = get_object_or_404(Individu, pk=individu_id)
URLs
urlpatterns = [
path('', views.index, name='index'),
path('<int:individu_id>/raison/', views.raison, name='raison'),
]
答案 0 :(得分:0)
好,所以:
1 /您肯定要为表单使用GET方法(您不提交要处理的数据/服务器状态更改)
2 /我不知道为什么要向索引模板中的{% url %}
标签传递参数(也不向FWIW传递参数)-您正在将表单提交给索引视图,不要期望任何其他参数。实际上,您可以删除HTML表单标签的action
属性,因为您想要的是默认值(提交当前网址)。
3 /您的views.raison
原型必须与url定义匹配,因此必须为:
def raison(request, individu_id):
# code here
4 /在您的索引视图中:
HttpResponseRedirect('%i/raison/' % individu_id)
您想使用django.core.urlresolvers.reverse
来构建网址:
from django.core.urlresolvers import reverse
def index(request):
# code here
if ...:
next = reverse("raison", kwargs={"individu_id": individu_id})
return HttpResponseRedirect(next)
或者-甚至更简单-只需使用the redirect
shortcut:
from django.shortcuts import redirect
def index(request):
# code here
if ...:
return redirect("raison", individu_id=individu_id)
您的代码可能还有其他问题,但是从您发布的信息来看,这些提示至少应该使您重回正轨。