2011-10-21 34 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

相关问题