Django Admin: Показать дубликат файла в хранилище - PullRequest
2 голосов
/ 12 октября 2011

У меня есть models.FileField на моей странице администратора в модели, и я хотел бы показать ошибку пользователю, когда он пытается загрузить уже существующий файл. Я уже пытался переопределить get_available_name () в FileSystemStorage, но если я сгенерирую ValidationError, он не будет отображаться красиво.

Есть ли способ сделать это (легко)?

1 Ответ

1 голос
/ 23 февраля 2012

Укажите пользовательскую форму для ModelAdmin:

class FileModel(models.Model):
    name = models.CharField(max_length=100)
    filefield = models.FileField()  

class CustomAdminForm(forms.ModelForm):

     # Custom validation: clean_<fieldname>()
     def clean_filefield(self):        
         file = self.cleaned_data.get('filefield', None):
         if file:
                # Prepare the path where the file will be uploaded. Depends on your project.
                # In example:
                file_path = os.path.join( upload_directory, file.name )
                # Check if the file exists
                if os.path.isfile(file_path):
                    raise ValidationError("File already exists")

         return super(CustomAdminForm, self).clean_filefield()


# Set the ModelAdmin to use the custom form
class FileModelAdmin(admin.ModelAdmin):
    form = CustomAdminForm
...