我是python的新手,并试图适应Python的OOP。有人可以解释为什么以下保存在名为“无”的文件夹中?我想在管理页面上传一个音频文件。该文件以“Vocab name”
存储在自己的文件夹中class Vocab(models.Model):
module = models.ForeignKey(Modules, on_delete=models.CASCADE)
number = models.CharField(max_length = 250)
name = models.CharField(max_length = 250)
class VocabContent(models.Model):
vocab = models.ForeignKey(Vocab, on_delete=models.CASCADE)
audio = models.FileField(upload_to=vocab.name)
在shell上运行以下命令。
>>> from module.models import Modules, Vocab, VocabContent
>>> vocab = VocabContent.objects.get(pk=1)
>>> vocab.vocab.name
'Numbers'
数字是我正在寻找的价值。
答案 0 :(得分:1)
可能是因为在运行模型迁移时未定义引用vocab.name
的方式。我无法准确解释为什么会发生这种情况,但解决方案是使用callable作为upload_to
在运行时对其进行评估并正确获取值,就像其他答案一样:Dynamic File Path in Django
所以,对你而言,你可以拥有类似的东西:
import os
def get_upload_path(instance, filename):
return os.path.join("%s" % instance.vocab.name, filename)
class VocabContent(models.Model):
vocab = models.ForeignKey(Vocab, on_delete=models.CASCADE)
audio = models.FileField(upload_to=get_upload_path) # Important to NOT put the parenthesis after the function name
这将导致将vocab.name
连接到每个新文件的文件名的路径。