Django:奇怪的反向匹配

2024-06-12 08:00:55 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的应用程序中,我有一个生成表单的视图。当此表单有效时,视图重定向到另一个视图,该视图是另一个表单,但我有一条错误消息,与反向匹配

My views.py:

def uploadData(request, dataType, method):
    if method == 'single':
        if dataType == 'Sequence-has-SNP':
            if request.method == 'POST':
                form = SeqHasSnpForm(request.POST)
                if form.is_valid():
                    idSequence = form.cleaned_data['seq_linked']
                    return redirect('addSNPsSeq', idSequence)
            else:
                form = SeqHasSnpForm()
            return render(request, 'myapp/upload_sequence-has-snp.html', locals())
        else:
            ...
    else:
        ...


def uploadSNPsToSeq(request, idSequence):
    seq = Sequence.objects.get(PK_idSequence = idSequence)
    thisSeqHasSnp = Seq_has_SNP.objects.filter(FK_idSequence = seq.PK_idSequence)
    snpAll = SNP.objects.all()
    if request.method == 'POST':
        form = SelectSNPsForSeqForm(request.POST, snps=snpAll, seqHasSnps=thisSeqHasSnp)
        if form.is_valid():
            print('Yeaaahhh!')
    else:
        form = SelectSNPsForSeqForm(snps=snpAll, seqHasSnps=thisSeqHasSnp)
        print(form)
    return render(request, 'myapp/SNPs-to-add-to-sequence.html', locals())

我的URL.py

urlpatterns = [
    url(r'^SNPs-to-add-to-sequence_(?P<idSequence>.+)$', views.uploadSNPsToSeq, name='addSNPsSeq'),
    url(r'^upload_(?P<dataType>[A-Za-z-]+)_(?P<method>(single|batch))$', views.uploadData, name='upload'),
    ...
    url(r'^$', views.home, name='home') 
]

我有两个模板upload_sequence-has-snp.htmlSNPs-to-add-to-sequence.html

这两个表单都可以,因为我可以访问我的第一个表单,例如选择一个form.cleaned_data['seq_linked']等于TEST。我可以在uploadSNPsToSeq中的print(form)终端中看到结果,但此视图的最后一行提出了一个NoReverseMatch error

NoReverseMatch at /myapp/SNPs-to-add-to-sequence_TEST

Reverse for 'upload' with arguments '('', '')' not found. 1 pattern(s) tried: ['myapp/upload_(?P<dataType>[A-Za-z-]+)_(?P<method>(single|batch))$']

我不明白为什么它在寻找myapp/upload_...而不是myapp/SNPs-to-add-to-sequence_...

有线索吗


Tags: toformadd视图表单ifrequestmyapp
1条回答
网友
1楼 · 发布于 2024-06-12 08:00:55

谢谢阿拉斯代尔!这就是问题所在

因此,在my views.py中,我用dataType替换了idSequence,添加了method作为我的uploadSNPsToSeq函数的参数,并在url.py中更改了此视图的url模式

views.py:

def uploadData(request, dataType, method):
    if method == 'single':
        if dataType == 'Sequence-has-SNP':
            if request.method == 'POST':
                form = SeqHasSnpForm(request.POST)
                if form.is_valid():
                    dataType = form.cleaned_data['seq_linked']
                    return redirect('addSNPsSeq', dataType, method)
            else:
                form = SeqHasSnpForm()
            return render(request, 'myapp/upload_sequence-has-snps.html', locals())
        else:
            ...
    else:
        ...

def uploadSNPsToSeq(request, dataType, method):
    seq = Sequence.objects.get(PK_idSequence = dataType)
    thisSeqHasSnp = Seq_has_SNP.objects.filter(FK_idSequence = seq.PK_idSequence)
    snpAll = SNP.objects.all()
    if request.method == 'POST':
        form = SelectSNPsForSeqForm(request.POST, snps=snpAll, seqHasSnps=thisSeqHasSnp)
        if form.is_valid():
            print('Yeaaahhh!')
    else:
        form = SelectSNPsForSeqForm(snps=snpAll, seqHasSnps=thisSeqHasSnp)
    return render(request, 'myapp/upload_snps-for-sequence.html', locals())

URL.py:

urlpatterns = [
    url(r'^upload_snps-for-sequence_(?P<dataType>[A-Za-z-]+)_(?P<method>(single|batch))$', views.uploadSNPsToSeq, name='addSNPsSeq'),
    url(r'^upload_(?P<dataType>[A-Za-z-]+)_(?P<method>(single|batch))$', views.uploadData, name='upload'),
    ...
    url(r'^$', views.home, name='home') 
]

相关问题 更多 >