Python Django风格的让用户预览上传数据的方式?

Python Django风格的让用户预览上传数据的方式?,python,django,django-forms,Python,Django,Django Forms,我使用的是Django表单,希望允许用户上传学生的CSV文件,执行一些服务器端验证,并在提交到数据库之前预览他们的数据。我有一个问题,关于最Django式的方法 我的代码目前如下: def import_pupils(request): if request.method == 'POST': form = PupilUploadForm(request.POST, request.FILES) if form.is_valid():

我使用的是Django表单,希望允许用户上传学生的CSV文件,执行一些服务器端验证,并在提交到数据库之前预览他们的数据。我有一个问题,关于最Django式的方法

我的代码目前如下:

def import_pupils(request):
    if request.method == 'POST':
        form = PupilUploadForm(request.POST, request.FILES)
        if form.is_valid():
            data = csv.DictReader(request.FILES['file_upload'])
            # Check for non-form errors - e.g. pupils not found in 
            # our existing database. Clean data and create master list. 
            pupils = ....
            # Show preview page and/or warning messages... on a new page?
            return render_to_response('preview_data.html', 
                { pupils : pupils, warning_messages: messages }, 
                context_instance = RequestContext(request))
        else:
            form = PupilUploadForm(request.POST)
    else:
        form = PupilUploadForm()
    return render_to_response('pupil_upload.html', locals(), context_instance=RequestContext(request))
如果没有错误,我的预览页面
preview\u data.html
将显示一个数据表,所有数据都打包在
中。我的下一步是添加一个链接/按钮,将所有这些内容保存到数据库中。我将使用以下代码添加数据:

for pupil in pupils:
    Pupil.objects.get_or_create(pupil=pupil['name'], teacher=pupil['teacher'])

我的问题基本上是:这条线应该走到哪里?处理这个问题最像Django的方式是什么?我的数据在
学生
列表中已经打包好了,我只想
获取或创建它
但是我应该使用一个链接到一个新的视图函数,一个
预览数据.html
上的新表单吗。。。?将数据传递到新页面然后重新导入似乎效率低下

我建议将此过程分为两步:

  • 首先,将上传的文件保存到某个临时位置,然后执行以下操作 您的验证和显示数据(包括任何验证 错误)

  • 如果用户选择保存文件,请从 已上载文件并保存到数据库,然后删除 文件

  • 如果不想使用临时文件,可以创建一个临时表,并将记录导入其中。然后,将它们复制到实际表(如果用户接受)或删除它们