如何显示要插入数据库的对象集合

时间:2011-10-21 19:18:43

标签: django

我想构建一个Django应用程序,允许使用他们的API在TagChimp上搜索电影,然后将正确的电影存储在Web应用程序的数据库中。以下是我认为它可以起作用的方式:

Information flow of movie saving 这是我的小应用程序应该做的:

  1. 让用户输入电影标题的搜索字词
  2. 显示找到的电影的某些属性,如标题,年份和图片,但保留其他属性
  3. 等待用户选择他正在寻找的合适电影,并使用电影模型将所有元数据插入数据库
  4. 我编写了一个传递电影标题的视图,它使用辅助对象从TagChimp中获取电影。它解析XML并创建一个字典数组,其中包含所有有趣的元数据并在页面上显示搜索结果。

    下一步是用户选择正确的电影,然后将其转换为模型对象并插入数据库。

    我是django的新手所以我不确定如何存储这个临时搜索结果,用户选择正确的搜索结果。有没有办法临时创建模型对象,只保存用户选择的模型对象?这是在一个视图中实现的,还是为流程的每个步骤创建单独的视图(输入搜索词 - 显示结果并让用户选择正确的 - 将电影插入数据库中)?

    正如Bialeki所指出的,我有两种可能的方法来解决这个问题:

    1. 将每条记录的TagChimpID保存为步骤2中表单中的隐藏值,并启动第二个请求,搜索所选的TagChimpID或
    2. 以某种方式在第2步中保留所拍摄的电影,以便我可以立即插入电影
    3. 第一个选项可能更容易实现,但需要两个外部数据源请求,而第二个选项可能更快,因为只需要一个外部请求。

1 个答案:

答案 0 :(得分: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