0

HttpResponseRedirectandを使用reverseして別のビューにリダイレクトした後、ValueError が発生します。これは、投稿されたフォームを処理するビューです (フォームは を使用して、モデルModelChoiceFieldからオプションのドロップダウン セットを取得します。Make

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

.. 次に、次makeのクエリセットをフィルタリングするために使用する kwarg として追加する次のビューにリダイレクトします。

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

URL:

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

フォームValueError: invalid literal for int() with base 10: 'Samsung'からオプションを選択すると、次のようになります。グーグルの後、これを解決する方法がまだわかりません..このエラーを解決する方法についてのアイデアをありがとう!


編集:

短縮モデル:

class Thing(models.Model):
    user = models.ForeignKey(User)
    created_on = models.DateTimeField(auto_now_add=True)
    updated_on = models.DateTimeField(auto_now=True)
    slug = models.SlugField()
    make = models.ForeignKey(Make)

トレースバック:

Traceback: File "/lib/python2.7/django/core/handlers/base.py" in get_response
  111.                         response = callback(request, *callback_args, **callback_kwargs) File "/myproject/myapp/views/browse.py" in makes
  21.     thing_list = Thing.objects.filter(make=make) File "/lib/python2.7/django/db/models/manager.py" in filter
  143.         return self.get_query_set().filter(*args, **kwargs) File "/lib/python2.7/django/db/models/query.py" in filter
  624.         return self._filter_or_exclude(False, *args, **kwargs) File "/lib/python2.7/django/db/models/query.py" in _filter_or_exclude
  642.             clone.query.add_q(Q(*args, **kwargs)) File "/lib/python2.7/django/db/models/sql/query.py" in add_q
  1250.                             can_reuse=used_aliases, force_having=force_having) File "/lib/python2.7/django/db/models/sql/query.py" in add_filter
  1185.                 connector) File "/lib/python2.7/django/db/models/sql/where.py" in add
  69.             value = obj.prepare(lookup_type, value) File "/lib/python2.7/django/db/models/sql/where.py" in prepare
  320.             return self.field.get_prep_lookup(lookup_type, value) File "/lib/python2.7/django/db/models/fields/related.py" in get_prep_lookup
  137.             return self._pk_trace(value, 'get_prep_lookup', lookup_type) File "/lib/python2.7/django/db/models/fields/related.py" in _pk_trace
  210.         v = getattr(field, prep_func)(lookup_type, v, **kwargs) File "/lib/python2.7/django/db/models/fields/__init__.py" in get_prep_lookup
  310.             return self.get_prep_value(value) File "/lib/python2.7/django/db/models/fields/__init__.py" in get_prep_value
  537.         return int(value)

Exception Type: ValueError at /browse/Samsung/ Exception Value: invalid literal for int() with base 10: 'Samsung'
4

1 に答える 1

1

モデルを投稿していただければMake、完全な回答を差し上げることができます。しかし、一般に、int ( ID)makeである外部キーを直接参照しています。Makeこの int をエラーの原因となっている文字列と比較し'samsung'make=makeいます。

モデルに含まれる文字列フィールドに応じてMake、それらのフィールドのいずれかを参照する必要があります。たとえば、文字列を受け入れるフィールドがあるMake場合:name

thing_list = Thing.objects.filter(make__name=make)

makeそれ以外の場合は、代わりに IDを渡す必要があります。'samsung'

于 2013-01-17T18:37:29.020 に答える