我创建了一个文件模型和一个文件夹模型。文件模型通过外键连接到所有者(用户)和文件夹。
现在,我要在以下路径上上传文件:owner_username/folder_title
。我的问题是如何从文件模型内部使用__str__
访问Folder
模型的ForeignKey
方法?
我的猜测是将{_1}}参数upload_to设置为等于FileField
,但是结果是我的文件被上传到:str(folder)
在models.py:
<django.db.models.fields.related.ForeignKey>/graph2.jpg
我希望以某种方式将文件上传到具有以下格式的路径:nameOfTheOwner / nameOfTheFolder
答案 0 :(得分:2)
您可以将upload_to=
parameter [Django-doc]设置为可访问self
的可调用对象,例如:
class File(models.Model):
def gen_filename(self, filename):
return '{}/{}/{}'.format(self.owner.username, self.folder.title, filename)
owner = models.ForeignKey(
User,
related_name='user',
on_delete=models.CASCADE
)
folder = models.ForeignKey(
Folder,
related_name='files',
on_delete=models.CASCADE,
default=''
)
file = models.FileField(upload_to=gen_filename)
def __str__(self):
return str(self.file)
或者您可以使用文件夹的__str__
,例如:
class File(models.Model):
def gen_filename(self, filename):
return '{}/{}/'.format(self.owner.username, self.folder, filename)
owner = models.ForeignKey(
User,
related_name='user',
on_delete=models.CASCADE
)
folder = models.ForeignKey(
Folder,
related_name='files',
on_delete=models.CASCADE,
default=''
)
file = models.FileField(upload_to=gen_filename)
def __str__(self):
return str(self.file)