0

我正在使用 GAE Blobstore 为我的 Django 应用程序上传和提供图像。对于管理员用户,可以通过将图像包装在 Django 模型中Image并为此模型提供标准管理功能来进行维护:添加、更新、删除。

为了执行实际上传,我修改change_form.html了 Image 模型的模板并替换{{ form_url }}{{ blobstore_url}}. {{ blobstore_url }}通过覆盖render_change_formof 来设置ImageAdmin

我注意到通过调用create_upload_url("/admin/some/url"),我得到了 GAE Blobstore 上传工具的编码 url,函数的参数 ("/admin/some/url") 实际上是 GAE/Blobstore 在上传完成后重定向到的 url。

与问题无关,但我也注意到,在我的第一种方法中,我只是覆盖了的值,{{ form_url }}但这似乎不起作用,因为没有设置表单的操作;它要么被其他地方覆盖,要么被忽略。

虽然这可行,但主要缺点是这种方法需要我将“admin/some/url”实现为一个视图,从中我可以处理模型图像所需的添加或更改,这实际上是代码的重复,已经作为默认管理员支持这些功能。

create_upload_url()所以我的问题是,为了在上传完成后运行图像模型的验证和数据库更新的标准管理功能,正确的 url 是什么?

编辑

或者,在默认管理操作(例如插入或更新)完成后执行上传可能是一个更好的设计......

4

1 回答 1

0

您将表单通常发布到的管理 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

于 2013-04-17T14:16:49.013 回答