让用户预览上传数据的Djangoesque方式?

2024-05-14 13:50:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是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_data.html将显示一个数据表,全部打包在pupils中。我的下一步是添加一个链接/按钮将所有这些保存到数据库中。我将用于添加数据的代码是:

^{pr2}$

我的问题基本上是:那条线应该往哪里走?什么是Django风格的处理方法?我的数据都打包在pupils列表中,我只想get_or_create它,但是我是否应该使用一个指向新视图函数的链接,preview_data.html上的新表单。。。?将数据传递到新页,然后重新导入它似乎效率低下。在


Tags: 数据django方法代码form数据库表单data
1条回答
网友
1楼 · 发布于 2024-05-14 13:50:08

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

  1. 首先,将上载的文件保存到某个临时位置,然后执行此操作 验证并显示数据(包括任何验证 错误)

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

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

相关问题 更多 >

    热门问题