2017-05-15 140 views
0

Django rest框架自動爲上傳的文件生成url。但是,它自動生成的url實際上並不指向文件的存儲位置。例如,我的文件上傳到我的API名爲example.txt,這就是我的數據庫中的對象看起來像後上傳:Django Rest框架上傳的文件Url

{ 
    name: "John Doe", 
    bio: "localhost:8000/api/users/static/example.txt" 
} 

我的靜態目錄位於根目錄中,這樣的文件實際上生活和能請訪問localhost:8000/static/example.txt。自動生成的url返回一個404.我怎樣才能覆蓋自動生成的網址是正確的?

這裏是我的模型看起來像:

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

你可以在你的序列化程序中添加代碼嗎? –

+0

剛更新了! – zjwhi

回答

0

定義你的MEDIA_URL和你MEDIA_ROOT到您setting.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_at=bio/files,只是因爲靜態路徑只是靜態文件,如.css,.js和圖像文件。

+1

完美,謝謝! – zjwhi

+0

@zjwhi記得在部署(DEBUG = TRUE)時,你的媒體是主機的服務器! –