Django: удалить связь с файлом, но не удалить файл - PullRequest
2 голосов
/ 04 августа 2011

Когда пользователь загружает файл, его могут использовать другие пользователи для прикрепления к своему проекту.

class DashFile(models.Model):
    dash_version = models.ForeignKey(DashVersion)
    title = models.CharField(max_length=255)
    file = models.FileField(upload_to=get_fs_upload_path, max_length=255)
    display_order = models.IntegerField(default=99)

По сути, я клонирую DashFile, поэтому все значения остаются неизменными, за исключением dash_version.

Теперь, если пользователь хочет удалить файл из своего проекта, файл будет удален. Однако при этом файл также удаляется для всех других пользователей, которые связались с этим файлом.

Итак, как я могу сделать так, чтобы когда пользователь «удаляет» файл из своего проекта, файл фактически не удаляется?

Я также знаю, что выбор дизайна неверен. Я должен был использовать не ForeignKey, а поле «многие ко многим». Но я там, где я сейчас.

Спасибо Eric

1 Ответ

0 голосов
/ 05 августа 2011

Это зависит от версии Django, которую вы используете. Начиная с версии 1.2.5 FileField никогда не удаляет файлы из серверной части хранилища на model.delete () .

Если вы используете Django <1.2.5, вы можете реализовать пользовательский <a href="https://docs.djangoproject.com/en/dev/howto/custom-file-storage/" rel="nofollow"> FileStorage :

from django.core.files import storage

class NoDeleteStorage(storage.FileSystemStorage):
    def delete(self, *a,**kw):
        pass

nodelete_storage = NoDeleteStorage()

class DashFile(models.Model):
    dash_version = models.ForeignKey(DashVersion)
    title = models.CharField(max_length=255)
    file = models.FileField(upload_to=get_fs_upload_path, 
                            storage=nodelete_storage, 
                            max_length=255)
    display_order = models.IntegerField(default=99)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...