Python 将URL参数传递给表单值Django

Python 将URL参数传递给表单值Django,python,django,forms,url,Python,Django,Forms,Url,我试图将表单输入的值设置为url,然后使用url参数中的信息重定向到另一个表单的另一个页面,并将另一个输入的另一个值传递给url 假设我的url是page1/value1/page2/value2 其中,value1来自第一个表单,value2来自第二页的第二个表单 使用这段代码,我可以获得url中的第一个值,但不知何故,我无法将表单信息保存到数据库中,并在url中设置其他值 class Acceso(FormView): template_name = 'codigo_zona.htm

我试图将表单输入的值设置为url,然后使用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)

提交第二个表单时,我收到错误
方法不允许(Post):HTTP/1.1 405 0
,因此我在url中从未看到第二个值。

如果您在get方法中使用Post方法,请将方法名称更改为“Post”。即使你不需要检查方法。
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)
这是正确的代码

    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,也可以使用基于函数的视图而不是基于类的视图

您混淆了基于函数的视图和基于类的视图。要在基于类的视图中处理帖子,您必须实现
POST
方法。您能详细解释一下吗?请:)这能回答你的问题吗?如果是基于函数的视图,则需要检查请求方法,如
if request.method==“GET”
,以处理GET请求,post也是如此。在基于类的视图中,将执行基于请求方法的方法<代码>获取()用于获取请求,而
post()用于post请求。因此,在类中需要一个
post()
方法来处理post请求。