【发布时间】:2017-08-14 12:30:41
【问题描述】:
我有一个带有 Tastypie 的 Django 应用程序,主要是 BackBone 客户端。我的一个模型有几个 ImageFields。这是一个类似的设置来帮助我解释这个问题。
settings.py
MEDIA_URL = "/media/"
models.py
class Foo(models.model):
bar = models.ImageField()
baz = models.CharField()
api.py
class FooResource(ModelResource):
class Meta:
queryset=models.Foo.objects.all()
resource_name = "foo"
authorization = Authorization()
当我向 API 发出 GET 请求时,它会将 MEDIA_URL 附加到文件名以返回可以访问栏的 URI。但是,当我在一行上更改 baz 的值,然后用它发出 PUT 请求时,它也会将 bar 的值更改为 URI。这意味着下次我获取该行时,它会再次附加 MEDIA_URL,破坏系统并为每个连续的 GET 和 PUT 附加它。我最终得到了 DB 中 bar 的值。
/media/media/media/bar.jpg
我认为我应该通过覆盖我的 ModelResource 中的一个方法来解决这个问题,这样当有一个 PUT 请求时,它会识别它正在获取一个 URI 或一个真实文件,并以某种方式改变它的行为。
这是正确的解决方法吗?您能否提供一些修复的实施细节?
【问题讨论】: