Django在本地主机上保存文件

时间:2019-06-17 13:25:47

标签: python django django-models

我正在开发Django应用(DRF),但是我是JS工程师,所以这对我来说是全新的。

我在所有实际模型之外的我的models.py中拥有这个:

Imports System.ComponentModel

Public Class ButtonRefreshSmall

Public Property MyText As String
    Get
        Return Me.Text
    End Get
    Set(value As String)
        Me.Text = value
        Me.Refresh()
    End Set
End Property

Public Sub New()
    'MyBase.New
    ' This call is required by the designer.
    InitializeComponent()

    ' Add any initialization after the InitializeComponent() call.
    'Me.Text = ""
End Sub

<Browsable(False)>
<DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)>
Public Overrides Property Text As String
End Class

,这是模型之一中使用的字段:

storage = S3Storage(aws_s3_bucket_name=settings.DOCUMENTS_BUCKET)
upload_location = 'recordings/'

这在生产中可以正常进行。但是,我希望能够在本地进行测试,在本地进行开发时添加这些zip文件。因此,我为zip_file = models.FileField( upload_to=upload_location, storage=storage, null=True) storage添加了此内容:

upload_location

然后,当我尝试在本地主机上通过admin保存文件时,出现以下错误:

if settings.DEBUG:
  storage = FileSystemStorage(location='/')
  upload_location = ''

如果我做对了,该应用程序将无法在文件系统上的某个位置创建该位置。也许我错了。我该怎么解决?

2 个答案:

答案 0 :(得分:1)

我建议您看看django-storages
您可以使用FileSystem for localhost和S3进行生产,轻松地将文件保存在模型上。
所有配置都将处于设置状态,因此您不再需要放置IF。

答案 1 :(得分:1)

传递到FileField的位置是相对于MEDIA_ROOT的,除非它以斜杠开头。如果它以斜杠开头,则这是绝对路径,并且是相对于驱动器根目录的。

因此,location='/'表示硬盘的根目录(因此出现权限问题。)

您可以使用./来使用MEDIA_ROOT,但是通常最好根据某些条件对资产进行分组。例如,对于名为SomeModel的模型,请将资产放置在location='some-models/'之类的地方。