我正在使用GAE Blobstore为我的Django应用上传和提供图片。对于管理员用户,可以通过将图像包装在Django模型Image
中并为此模型提供标准管理功能来进行维护:添加,更新,删除。
要执行实际上传,我修改了图片模型的change_form.html
模板,并将{{ form_url }}
替换为{{ blobstore_url}}
。通过覆盖{{ blobstore_url }}
的{{1}}来设置render_change_form
。
我注意到,通过调用ImageAdmin
,我获得了GAE Blobstore上传工具的编码网址和函数的参数(" / admin / some / url")实际上是GAE / Blobstore在完成上传后重定向的URL。
与问题不太相关,但我注意到的一点是,在我的第一种方法中,我只是覆盖了create_upload_url("/admin/some/url")
的值,但这似乎不起作用,因为表格的动作没有设定;它要么被覆盖在其他地方,要么被忽略。
虽然这有效但主要的缺点是这种方法要求我实施" admin / some / url"作为一个视图我可以处理模型Image所需的添加或更改,这实际上是代码重复,因为默认管理员已经支持这些功能。
所以我的问题是,为了在完成上传后运行Image模型的验证和数据库更新的标准管理功能,传递给{{ form_url }}
的正确URL是什么?
修改
或者,在默认管理操作(例如插入或更新)完成后执行上传可能是更好的设计......
答案 0 :(得分:0)
您将表单通常发布到的admin URL传递给create_upload_url()。
这样文件将上传到Blobstore,然后表单将被重定向到正常的管理表单处理URL。
然而,除非你使用django-nonrel,否则这不会“正常工作”。在重定向目标中,您需要将GAE blobstore url保存到模型中,默认情况下django不会发生这种情况。如果你想这样做,你可以考虑整合django-nonrel的GAE存储后端。
https://github.com/dragonx/djangoappengine/blob/1.4-devappserver2/djangoappengine/storage.py