2016-12-28 2 views
0

私は2つのビュー、AddとEditビューを持つ基本的なダイアリーアプリケーションを持っています。追加ビューでユーザーが「追加」ボタンを押すと、データがデータベースに保存され、簡単なメッセージが表示されます。ユーザーが編集ビューで「更新」ボタンを押すと、データが更新され、最後の更新スタンプが追加されます。ビューをリンクしてそれらの間でデータを渡す最善の方法は何ですか?

これまでのところ、これらのビューは独立して実行されています。編集ビューでは、デフォルトで最後に保存されたエントリが読み込まれ、更新されます。

Add Viewに新しい日記項目を追加すると、編集ビューに移行して、必要に応じて編集と更新を行えるようにします。ビューをリンクして関連するデータを編集ビューに渡して、どのエントリ(データベースオブジェクト)を編集用にフェッチするのかを知るにはどうすればよいですか?また、編集ビューを使用して、GETなどの指定された日記エントリをフェッチすることもできます。だから、編集ビューはそれを呼び出す人には無関心で、読み込む日記項目を知っているだけです。

彼らは今あるとして追加し、編集ビューのコードは、以下に表示されます。クラスベースビューを事前に

def addEntry(request): 
    entryForm = None 

    if request.method == "POST": 
     entryForm = EntryForm(request.POST) 

     if entryForm.is_valid(): 
      entryForm.save(commit = True) 
      request.method = "GET" 
      return entrySubmitted("Entry has been submitted") 
     else: 
      logger.info(entryForm.errors) 
    else:  
     # Set up view with new entry form 
     entryForm = EntryForm() 

    template = getEntryViewTemplate(entryForm) 

    return render(request, "DiaryEntry.html", template) 



def editEntry(request): 
    # Get the latest entry from the database 
    entry = Entry.objects.last(); 

    if request.method == 'GET': 
     entryForm = EntryForm(instance = entry) 
    else: 
     entryForm = EntryForm(request.POST, instance = entry) 
     if entryForm.is_valid(): 
      entryForm.setLastUpdated(datetime.now()) 
      entryForm.save(commit = True) 

    templateData = getEntryViewTemplate(entryForm) 
    return render(request, "EditEntry.html", templateData) 

おかげで、

フランシス

+1

はきっとあなただけの編集ビューにIDパラメータを渡すと、編集するオブジェクトを決定するためにそれを使用する必要が役立つことを願っていますか?チュートリアルでは、これを行う方法を正確に示しています。 –

+0

@DanielRosemanチュートリアルを参照していますか? DjangoとPythonの新機能ですありがとうございました。 –

+0

多くの場合、誰かがビューをリンクしていると言われると、複数のユーザー用に設計されたものを書いているという事実を完全に見落としてしまいます。代わりに、特定のビューに対応する* url *にリダイレクトしています – Sayse

答えて

0

ルックDjangoのドキュメントを。

https://docs.djangoproject.com/en/1.10/topics/class-based-views/intro/#

あなたは別の方法で、クラスを作成することができます。 Get、Post(オブジェクトの作成)、Put(オブジェクトの更新)

そして、多くのメソッドと属性が便利です。 クラスビューを特定のモデル(Entry)にリンクすることができます。 https://docs.djangoproject.com/fr/1.10/ref/class-based-views/mixins-single-object/#django.views.generic.detail.SingleObjectMixin.get_queryset

ビューをリンクして編集ビューに関連するデータを渡して、どのエントリ(データベースオブジェクト)を編集用にフェッチするのですか? 編集するIDオブジェクトを渡す必要があります。 2つのソリューション。あなたの投稿データ。またはあなたのURLの議論によって。 http://your_web_site.com/entry/id_entry/ あなたのフォームを入力データで初期化する

URL djangoには、クラスベースビューのURLにリンクすることができます。

url(r'^entry/$', views.EntryView.as_view(), name='create_entry'), 
    url(r'^entry/(?P<pk>[-\w/]+)$', views.EntryView.as_view(), name='update_entry'), 

私はこれがあなた

+0

この回答は大変助かりました。エントリのIDを私のビューに渡すことを選択しました –

+0

あなたは大歓迎です。これが問題を解決した場合は、編集したコードを投稿して回答を受け入れることをためらってください。 http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – Wilfried

関連する問題