我在Django框架之上構建了一個軟件存儲庫。因爲它會包含很多文件,所以我希望它通過文件管理器查看時有一定意義。所以我首先按照他們所屬的程序的URL將這些文件分組,然後通過該URL的前兩個字母。下面是它的外觀:在Django中上傳文件:阻止FileField寫入數據庫的完整路徑
的模式是這樣的:
class File(models.Model):
# If called like upload_to, don't put a slash in front of the result
# because we already have one in settings.MEDIA_ROOT
def get_absolute_url(self, filename=None):
return '%sfiles/%s/%s/%s' % ('' if filename else '/',
self.download.url[:2],
self.download.url,
filename or self.name)
name = models.FileField(upload_to=get_absolute_url, max_length=255)
size = models.IntegerField()
title = models.CharField(blank=True, max_length=255)
download = models.ForeignKey('Download', related_name='files')
class Download(models.Model):
url = models.SlugField(unique=True, max_length=255)
title = models.CharField(max_length=255)
有,但是,一個小問題:FileField或將存儲而不只是名稱的整個生成的路徑,這我寧願避免。有什麼方法可以覆蓋(可能在我自己的字段類中)什麼FileField寫入數據庫以及在加載原始字段後如何重建路徑?