2011-10-21 33 views
1

我想構建一個Django應用程序,該應用程序允許使用其API在TagChimp上搜索電影,然後將正確的電影存儲在Web應用程序的數據庫中。這裏是如何,我認爲它可以工作:如何顯示要插入數據庫的對象集合

Information flow of movie saving 這是我小的應用程序應該做的事情:

  1. 讓用戶對電影標題輸入搜索詞
  2. 顯示發現電影的某些屬性如標題,年份和圖片,但保持周圍
  3. 等待其他屬性,爲用戶挑選合適的電影,他一直在尋找和使用電影模式
插入所有元數據到數據庫

我編寫了一個傳遞電影標題的視圖,它使用一個輔助對象從TagChimp獲取電影。它解析XML並創建一個包含所有感興趣的元數據的字典數組,並在頁面上顯示搜索結果。

下一步是用戶選擇正確的電影,然後將其轉換爲模型對象並插入到數據庫中。

我是django的新手,所以我不確定如何存儲這個臨時搜索結果,其中用戶選擇了正確的搜索結果。有沒有辦法臨時創建模型對象,只保存用戶選擇的對象?這是全部在一個視圖中實現還是爲流程的每個步驟創建單獨的視圖(輸入搜索詞 - 顯示結果並讓用戶選擇正確的視圖 - 將影片插入到數據庫中)?

由於Bialeki指出我有這個問題處理的兩種可能的方式:

  1. 保存的每條記錄在步驟2中的形式的隱藏價值的TagChimpID和啓動第二請求的只是搜索選擇TagChimpID或
  2. 勉強保持所取得的電影在步驟2左右,所以我可以插入影片馬上

第一種選擇是,也許更容易實現,但需要兩個請求到外部數據源,而第二選擇離子可能會更快,因爲只需要一個外部請求。

回答

1

簡短的回答是,如果你創建一個Django模型,它不會將它保存到數據庫中。所以,你可以這樣做:

def view(request): 

    results = search(request.GET['query']) 
    possible_movies = [] 

    for result in results: 
    possible_movies.append(
     Movie(title=result.title, year=result.year, picture=picture) 
    ) 

    return render_to_response('view.html', possible_movies=possible_movies) 

然後在你的觀點,當一個人選擇一個,你就需要重新傳回任何一個ID找到將這些數據或傳回的標題,年份,圖片等等。如果有人提交表單繼續,並且將它們包含爲隱藏字段,那麼這很簡單。

關鍵是要堅持一些東西到數據庫中,你必須調用save

movie = Movie(title=title, year=year, picture=picture, **other_data) 

# Movie is not currently saved. 
print movie.id 
# prints 'None' 


movie.save() 

# Movie is saved 

print movie.id 
# prints 123 
+0

因此,它是正確的,我必須包括可能的電影,這是不是在選擇列表中顯示的所有屬性,如形式隱藏字段?所以如果我在用戶選擇電影后得到表單的數據,我必須再次生成一個電影對象,然後保存它? – GorillaPatch

+1

我就是這麼做的。你可以使用Django會話並在那裏存儲模型,但是你的頁面不是無狀態的。另一件需要考慮的事情是,如果您最初查詢電影的地方生成了一個ID(從您對問題的描述中可以看出這一點),那麼您可以將其存儲起來,然後在保存時查找該ID。 – Bialecki

+0

感謝您的回答。我用圖片更新了問題以說明數據流。我認爲在這種情況下簡單地存儲TagChimp的記錄ID就很容易了。但是,如果沒有這樣的ID,我想我將不得不介紹會議。現在,如果用戶獲得查詢的結果太多,我必須運行分頁。 – GorillaPatch

相關問題