Django-文件字段上载到,文件名来自其他字段';s主键
我有一个Django模型:Django-文件字段上载到,文件名来自其他字段';s主键,django,django-models,Django,Django Models,我有一个Django模型: class ObservationMedia(models.Model): observation = models.ForeignKey(Observation) audio_file = AudioFileField ( upload_to=audio_dir, blank=True, null=True ) photo_file = models.ImageField( upload_to=img_dir, blank=Tru
class ObservationMedia(models.Model):
observation = models.ForeignKey(Observation)
audio_file = AudioFileField ( upload_to=audio_dir, blank=True, null=True )
photo_file = models.ImageField( upload_to=img_dir, blank=True, null=True )
此介质表链接到介质相关的表(观察)
如何保存
AudioFileField
(只是FileField
的一个超类)和ImageField
,使文件名成为观察的主键,例如2465.jpg
?据我所知,我只允许将'instance'和'filename'传递到upload\u
,因此我不知道如何传递这个额外的参数。您可以从实例获取pk。像这样:
def get_audio_path(instance, filename):
return os.path.join(audio_dir+instance.observation.pk+".jpg")
class ObservationMedia(models.Model):
observation = models.ForeignKey(Observation)
audio_file = AudioFileField ( upload_to=get_audio_path, blank=True, null=True )
我不希望根据
pk
存储文件,这将导致安全问题,因为任何人都可以通过增加pk
来浏览文件。使用一些安全的散列,这很难猜测。好的,这是一个很好的建议。现在我正在用时间戳保存它们,所以这可能比pk好。哦,我明白了,我没有意识到instance
就是模型的实例。但是,文档说:“在大多数情况下,这个对象还没有保存到数据库中,因此如果它使用默认的自动字段,它的主键字段可能还没有值。”()。所以这可能不安全。是的,对。如果尚未创建观测模型,则该操作将不起作用。对于我的项目,我只使用随机生成的名称。