2017-05-15 12 views
0

Django restフレームワークによって、アップロードされたファイルのURLが自動的に生成されます。ただし、自動的に生成されるURLは、実際にファイルが格納されている場所を指しません。例えば、私はexample.txtという名前の私のAPIにファイルをアップロードし、これが私のデータベース内のオブジェクトは、アップロード後に次のようになります。Django RestフレームワークアップロードされたファイルURL

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

ファイルが実際に住んでいるとすることができますので、私の静的なディレクトリがルートディレクトリにありますlocalhost:8000/static/example.txtにアクセスしてください。自動的に生成されたURLは404を返します。自動的に生成されたURLをどのように上書きして正しいものにすることができますか?ここで

は私のモデルは次のようになります。

class User(models.Model): 
    name = models.CharField(primary_key=True, max_length=30) 
    bio = models.FileField(null=True, blank=True, upload_to='static') 

ここシリアライザは次のようになります。あなたは

MEDIA_URL = '/media/' 
MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 

をsetting.pyにあなたのMEDIA_URLとあなたのMEDIA_ROOTを定義

class UserSerializer(serializers.ModelSerializer): 
    class Meta: 
    model = User 
    fields = ("name", "bio") 
+0

シリアライザにコードを追加できますか? –

+0

ちょうどそれを更新しました! – zjwhi

答えて

0

あなたのURLに追加してください。

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

MEDIA_ROOTは、ファイルを保存する絶対パスです。 MEDIA_URLは、MEDIA_ROOTから配信されたメディアを処理するURLです。そして、私はupload_at=staticupload_at=bio/filesに変更する必要があります。なぜなら、静的パスは.css、.js、およびイメージファイルのような静的ファイルだけにすぎないからです。

+1

完璧、ありがとう! – zjwhi

+0

@zjwhiデプロイ(DEBUG = TRUE)では、あなたのメディアはホストによるサーバーであることに注意してください。 –

関連する問題