我正在定义一个包含FileField的Model,由于不相关的原因,无法将该FileField应该包含的文件保存在媒体文件夹中。因此,我需要定义一个保存到不同Path中的FileStorage。当在我的模型中定义该FileStorage并从我的django设置中传递DJANGO_ROOT变量来构建我的位置路径时,一旦我为我的模型生成了迁移,这就被解析为系统特定的路径。因为路径现在特定于我的开发目录,我无法在所有生产服务器上应用生成的迁移文件,而且在所有生产服务器上生成迁移显然不是一种选择。我也尝试过编辑自动生成的迁移本身的路径,使其依赖于django的设置。可悲的是,manage.pymigrate命令告诉我,它希望为该模型生成新的迁移。我如何传递一个相对路径到我的FileStorage位置,允许我为生产服务器生成迁移?我的模型:
class ModelWithFile(models.Model):
file = models.FileField(
storage=FileSystemStorage(location=os.path.join(settings.DJANGO_ROOT, "folder_name"),
verbose_name=_("FileObject"),
)
自动生成迁移:
from django.db import migrations, models
from django.conf import settings
import django.core.files.storage
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='ModelWithFile',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('file', models.FileField(upload_to=b'', storage=django.core.files.storage.FileSystemStorage(base_url=None, location='/home/myusername/repros/thisrepro/folder_name/'), verbose_name='File')),
],
options={
'verbose_name': 'Model With File',
},
),
]
我尝试通过os.path.join(settings.DJANGO_ROOT,“folder_thats_not_media”)作为我的位置。
我希望自动生成的迁移使用与设置中定义的相同的相对路径
我遇到了什么问题?自动生成的迁移中的位置路径被解析为系统特定路径
1条答案
按热度按时间ryevplcw1#
听起来你在处理两个问题。第一个:
在django FileField上使用
upload_to
参数:https://docs.djangoproject.com/en/4.1/ref/models/fields/#django.db.models.FileField.upload_to
该函数输入示例和文件名,但您也可以导入设置以增加灵活性。例如:
至于读取迁移脚本中的位置,听起来像是在寻找django.apps:
从这一点上,您可以使用OS lib从应用程序位置到达您需要到达的位置。
更多文档可在此处找到:https://docs.djangoproject.com/en/4.1/ref/applications/