1

なぜこれがNoReverseMatchエラーを返すのですか?

見る:

def browse(request):
    thing_list = Thing.objects.all()
    if request.method == 'POST':
        form = BrowseForm(request.POST)
        if form.is_valid():
            make = Make.objects.all()
            return HttpResponseRedirect(reverse('browse_makes', args=[make]))
    else:
        form = BrowseForm()
    return render(request, 'browse.html', {'form':form, 'thing_list':thing_list})

def makes(request, make):
    ad_list = Thing.objects.filter(make=make)
    return render(request, 'browse-makes.html', {'thing_list':thing_list})

url:

url(r'^browse/$', 'axlepost.views.browse.browse', name='browse'),
url(r'^browse/(?P<make>[\w-]+)/$', 'axlepost.views.browse.makes', name='browse_makes'),

形:

class BrowseForm(forms.Form):
     make = forms.ModelChoiceField(queryset=Make.objects.all())

モデル:

class Make(models.Model):
    make = models.CharField(max_length=20)

class Thing(models.Model):
    make = models.ForeignKey(Make)

返品Reverse for 'browse_makes' with arguments '([<Make: Samsung>],)' and keyword arguments '{}' not found. このエラーを解決する方法についてのアイデアをありがとう!

4

2 に答える 2

2

reverse()1 つの値ではなく QuerySetを処理しています。また、.all()クエリであるため、複数のオブジェクトが含まれている可能性があり、フォームの結果とは関係ありません。

make = Make.objects.all() # QuerySet = ([<Make: Samsung>], [<Make: Sony>], [<Make: Apple>], etc)
return HttpResponseRedirect(reverse('browse_makes', args=[make])) # Expects 1 value

フォームで選択したものにリダイレクトすると仮定すると、Make次のようなものが必要になります。

if form.is_valid():
    # Get the valid form data
    cd = form.cleaned_data

    # Get the selected Make
    make = cd.get('make')

    # Redirect - note 'make.make'.  You want to pass the value not the object
    return HttpResponseRedirect(reverse('browse_makes', kwargs={'make': make.make}))
于 2013-01-17T09:40:37.540 に答える
0

いくつかの問題があると思います

  • URL が適切なビューに対応していません

この行を変更

url(r'^browse/(?P<make>[\w-]+)/$', 'axlepost.views.browse.makes', name='browse_makes'),

url(r'^browse/(?P<make>[\w-]+)/$', 'axlepost.views.browse', name='browse_makes'),
  • makeパラメータを取るようにビュー定義を変更します

    def browse(request, make): ... #ローカル変数 'make' を別のものに変更します

于 2013-01-17T04:32:15.727 に答える