Django rest框架自动生成上传文件的URL。但是,它自动生成的URL实际上并不指向文件的存储位置。例如,我将文件上传到名为example.txt
的api,这就是上传后数据库中的对象:
{
name: "John Doe",
bio: "localhost:8000/api/users/static/example.txt"
}
我的静态目录位于根目录中,因此文件实际存在,可以在localhost:8000/static/example.txt
访问。自动生成的url返回404.如何将自动生成的URL覆盖为正确的URL?
这是我的模型的样子:
class User(models.Model):
name = models.CharField(primary_key=True, max_length=30)
bio = models.FileField(null=True, blank=True, upload_to='static')
以下是序列化程序的样子:
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ("name", "bio")
答案 0 :(得分:1)
将MEDIA_URL和MEDIA_ROOT定义到settings.py
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
并添加到您的urls.py
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
MEDIA_ROOT是保存文件的绝对路径。 MEDIA_URL是处理MEDIA_ROOT提供的媒体的网址。我应该将upload_at=static
更改为upload_to=bio/files
,因为静态路径仅适用于.css,.js和图像文件等静态文件。