我正在开发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 = ''
如果我做对了,该应用程序将无法在文件系统上的某个位置创建该位置。也许我错了。我该怎么解决?
答案 0 :(得分:1)
我建议您看看django-storages。
您可以使用FileSystem for localhost和S3进行生产,轻松地将文件保存在模型上。
所有配置都将处于设置状态,因此您不再需要放置IF。
答案 1 :(得分:1)
传递到FileField
的位置是相对于MEDIA_ROOT
的,除非它以斜杠开头。如果它以斜杠开头,则这是绝对路径,并且是相对于驱动器根目录的。
因此,location='/'
表示硬盘的根目录(因此出现权限问题。)
您可以使用./
来使用MEDIA_ROOT
,但是通常最好根据某些条件对资产进行分组。例如,对于名为SomeModel
的模型,请将资产放置在location='some-models/'
之类的地方。