2017-05-03 7 views
0

私は2つのDjangoビューを持っています.1つはフォームセットをロードし、もう1つはそれをサブミットします。これは、フォームの再送信を避けるか、POST後に別のビューに変更する必要があります。そして、提出した後、フォームセットをロードするビューにリダイレクトします。しかし、私はURLを取得することはできません/逆に動作します。ここでNoReverseMatch逆にキーワード引数を定義しないと、

は、私の見解およびURL

def view(request, model1_id): 

    #load formsets 

    #pass information to submit view 
    request.session['model1_session'] = int(model1_id) 

    return render(request, 'app/view.html') 

def view_submit(request): 
    #get the session 
    model1_object = request.session.get('model1_session') 
    ... 
    if request.method == 'POST': 
     #save formset 
     #error!!!! 
     return HttpResponseRedirect(reverse("app:view", kwargs={"model1_id": "model1_object"})) 


url(r'^(?P<model1_id>[0-9]+)/model1/something/$', views.view, name='view'), 
url(r'^model1/something/submit/$', views.view_submit, name='view_submit'), 

されていますが、私が提出押すと、すべてがうまく保存されますが、その逆は動作しません....

Internal Server Error: /app/model1/something/submit/ 
Traceback (most recent call last): 
    File "/Library/Python/2.7/site-packages/django/core/handlers/base.py", line 149, in get_response 
    response = self.process_exception_by_middleware(e, request) 
    File "/Library/Python/2.7/site-packages/django/core/handlers/base.py", line 147, in get_response 
    response = wrapped_callback(request, *callback_args, **callback_kwargs) 
    File "/Users/username/Documents/Database/project/app/views.py", line 412, in view_submit 
    return HttpResponseRedirect(reverse("app:view", kwargs={"model1_id": "model1_object"})) 
    File "/Library/Python/2.7/site-packages/django/core/urlresolvers.py", line 600, in reverse 
    return force_text(iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))) 
    File "/Library/Python/2.7/site-packages/django/core/urlresolvers.py", line 508, in _reverse_with_prefix 
    (lookup_view_s, args, kwargs, len(patterns), patterns)) 
NoReverseMatch: Reverse for 'view' with arguments '()' and keyword arguments '{'model1_id': 'model1_object'}' not found. 1 pattern(s) tried: [u'app/(?P<model1_id>[0-9]+)/model1/something/$'] 

私はしないでくださいなぜそれがkwargsを取らないことを理解するか?

class Model1(models.Model): 

    ... 

    def __str__(self): 
     return unicode(self.id) or u'' 

    def get_absolute_url(self): 
     #I think this is the problem... but I don't know how to solve it... 
     return reverse('app:view', kwargs={'id': self.id}) 

...助けて...

+0

エラーがで起こっているが、 '(リバース "アプリ:ビュー"、kwargsから= {」 "model1_id": "model1_object"} ' – itzMEonTV

+0

' 'app:model1''の名前パターンに似たURLは表示されません。完全な' urls.py'を入力してください。 –

+0

@SardorbekImomaliev Ah今はモード感覚にする必要がありますか? –

答えて

1

あなたは、変数model1_objectの代わりに文字列"model1_object"を使用しています。試してみてください:あなたの代わりにreverseHttpResponseRedirectredirectショートカット使用して、コードを簡素化することができ

reverse("app:view", kwargs={"model1_id": model1_object}) 

注:

from django.shortcuts import redirect 

return redirect("app:view", model1_id=model1_object) 
+0

私はそれが単純だとは思えません...素晴らしいヒントはまったく同じですか? :) ご協力いただきありがとうございます! –

+0

はい、上記の 'redirect'行はあなたのコードの代わりに使われます。 – Alasdair

関連する問題