繁体   English   中英

将 URL 参数传递给表单值 Django

[英]Pass URL parameter to form value Django

我正在尝试将表单输入的值设置为 url,然后使用 url 参数中的信息重定向到另一个表单的另一个页面,并将另一个输入的另一个值传递给 url。

假设我的网址是page1/value1/page2/value2

其中 value1 来自第一个表单,value2 来自第二页中的第二个表单。

使用此代码我可以获取 url 中的第一个值,但不知何故我无法将表单信息保存到数据库并在 url 中设置另一个值。

class Acceso(FormView):
    template_name = 'codigo_zona.html'
    form_class = AccesoForm

    def form_valid(self, form):
        zona_code = form.cleaned_data.get('codigo_acceso')
        return redirect('registro', zona_code)


class AccesoDetails(View):
    def get(self, request, zona_code):
        zona = Zona.objects.filter(codigo_acceso=zona_code).first()

        if request.method == 'POST':
            zona_id = zona.pk
            range_start = 10 ** (6 - 1)
            range_end = (10 ** 6) - 1
            access_code = randint(range_start, range_end)
            form = RegistroResidenteForm(request.POST)
            if form.is_valid():
                registro_residente = form.save(commit=False)
                registro_residente.zona_residencial.pk = zona_id
                registro_residente.codigo_acceso = access_code
                registro_residente.status_activacion = False
                registro_residente.save()
        else:
            form = RegistroResidenteForm()

        context = {
            'zona': zona,
            'form': form
        }
        return render(request, 'registro_residentes.html', context)

我收到错误Method not allowed (Post): HTTP/1.1 405 0提交第二个表单时,所以我从未在 url 中看到第二个值。

您在 get 方法中使用 POST 方法,请将方法名称更改为“post”。 即使你不需要检查方法。 这是正确的代码。

    def post(self, request, zona_code):
        zona = Zona.objects.filter(codigo_acceso=zona_code).first()
        zona_id = zona.pk
        range_start = 10 ** (6 - 1)
        range_end = (10 ** 6) - 1
        access_code = randint(range_start, range_end)
        form = RegistroResidenteForm(request.POST)

        if form.is_valid():
            registro_residente = form.save(commit=False)
            egistro_residente.zona_residencial.pk = zona_id
            registro_residente.codigo_acceso = access_code
            registro_residente.status_activacion = False
            registro_residente.save()
        else:
            form = RegistroResidenteForm()

        context = {
            'zona': zona,
            'form': form
        }
        return render(request, 'registro_residentes.html', context)

Django 通用视图 (View) 使用 get 方法,表单提交是 post 方法,这就是 django 引发错误的原因,您可以使用 CreateView 或 FormView,也可以使用基于函数的视图而不是使用基于类的视图

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM