3

FileFieldの URL を希望どおりに設定できません。

私のモデルはによって定義されています

class MyModel(models.Model):

    pdf_file = models.FileField(upload_to="reports", null=True, blank=True)
    # more stuff

そして、次を使用してインスタンスを作成します。

myModel = MyModel()
myModel.pdf_file = "some_file.pdf"
myModel.save()

myModel.pdf_file.urlを返しますが、属性のために である<MEDIA_URL>/some_file.pdfと予想されます。<MEDIA_URL>/reports/some_file.pdfupload_to

私は何が欠けていますか?

編集

File最初に の代わりにオブジェクトを設定しようとしましたが、 が追加されstringたファイルが複製_<duplication_num>されるため、最初に tmp フォルダーにファイルを作成して削除します。

myModel.pdf_file = File(open(TMP_FILE_PATH + filename))
myModel.save()

# now that the file is saved to its final location, delete tmp

filepath = os.path.abspath(TMP_FILE_PATH + filename)
os.remove(filepath)
4

2 に答える 2

2

upload_toアップロードに使用されます。文字列名を直接割り当てています。upload_to は、(フォームからアップロードして) FileField オブジェクトを作成する場合にのみアクションを実行します。

ここでドキュメントを読むことができます

于 2013-06-04T19:28:55.347 に答える
1

upload_toは、アップロードするファイルが保存されるプロジェクト ルートからの相対ディレクトリです。しかし、ファイルを割り当てているのではなく、文字列を割り当てているFileFieldためsome_file.pdfMEDIA_ROOT.

繰り返し: ファイル名 (文字列) を割り当てると、FileFieldで定義されたパスが無視されupload_to、指定された文字列が実際のパスとして使用されます。

幸運を :)

于 2013-06-05T01:44:00.620 に答える