2016-12-28 55 views
0

我有一個基本的日記應用程序,它有兩個視圖:添加和編輯視圖。當用戶在添加視圖上點擊「添加」按鈕時,數據被保存到數據庫中並顯示簡單的信息。當用戶在編輯視圖上點擊「更新」按鈕時,數據被更新並且添加最後一個更新標記。鏈接視圖並在它們之間傳遞數據的最佳方式是什麼?

到目前爲止,這些觀點獨立運行。編輯視圖默認加載上次保存的條目並允許更新。

我想更新它,以便在添加視圖上成功添加新的日記條目後,它將轉換到編輯視圖以允許用戶在需要時編輯和更新。如何將視圖鏈接在一起並將相關數據傳遞給編輯視圖以知道要獲取哪個條目(數據庫對象)進行編輯?此外,我希望能夠獨立使用編輯視圖來獲取指定的日記條目,例如在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對象才能編輯。兩種解決方案在您的發佈數據中。或者通過你的url中的參數。 http://your_web_site.com/entry/id_entry/ 你初始化與條目數據表單

在您的網址Django的,你可以鏈接到網址到您的階級基礎視圖。

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

我希望這將有助於你

+0

Thanks @Wilfried這個答案幫了我很多忙。我選擇將條目的ID傳入我的視圖 –

+0

歡迎您。如果這能解決您的問題,請毫不猶豫地發佈您的代碼並接受答案。 http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – Wilfried

相關問題