示例#1
0
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)
        )
示例#2
0
    def __init__(self, client):
        self.client = client
        self.storage = OverwriteStorage()

        self._snippets = None