class UploadedFile(models.Model): FILES_ROOT = 'files' # Directory name inside MEDIA_ROOT def _generate_filename(instance, filename): """Generate a new unique filename while preserving the original filename extension. If an existing UploadedFile gets updated do not generate a new filename. """ # Instance is new UploadedFile, generate a filename if not instance.id: ext = os.path.splitext(filename)[1] filename = str(uuid.uuid4()) + ext return os.path.join(UploadedFile.FILES_ROOT, filename) # Use existing filename. obj = UploadedFile.objects.get(id=instance.id) return obj.file.name file = models.FileField(storage=OverwriteStorage(), upload_to=_generate_filename) name = models.CharField(max_length=255) created = models.DateTimeField(auto_now_add=True) modified = models.DateTimeField(auto_now=True) def __unicode__(self): return self.name @property def url(self): site_url = getattr(settings, 'CDN_URL', settings.SITE_URL) full_url = urljoin(site_url, self.file.url) return full_url @property def snippets(self): return Snippet.objects.filter( models.Q(data__contains=self.file.url) | models.Q(template__code__contains=self.file.url) )
def __init__(self, client): self.client = client self.storage = OverwriteStorage() self._snippets = None