現象は理解した、が、となると `Storage.get_available_name` によりファイル名が変更される可能性があって`slug`と実`filename`の対応が取れないという事になるよね。

とすると下記のように**保存してから`slug`を適用する**という戦略のほうが良いと思う

```
# .. (ry
# empty=True だが`save`により保存時に自動付加される。詳細は`save`に記載
slug = models.SlugField(_('Slug'), unique=True, editable=False, empty=True)
# ..(ry
def save(self, *args, **kwargs):
    # 同名ファイルの存在衝突を避けるためにまずファイルを保存する
    super().save(*args, **kwargs)
    # 変更されたファイル名を元に slug を作成し、適用する
    from hashlib import sha1
    self.slug = sha1(self.content_file.name.encode('utf-8')).hexdigest()
    # ref: https://docs.djangoproject.com/en/dev/ref/models/instances/#specifying-which-fields-to-save
    super().save(update_fields=['slug'])
    return self
````

ただし、実験してないので動くかは今のところ不明。動くはず。