I have a models.FileField on my Admin-Page in a Model and would like to show an error to the user when he tries to upload an already existing file. I already tried overriding get_available_开发者_StackOverflow中文版name() on FileSystemStorage, but if I throw a ValidationError, it doesn't get displayed nicely.
Is there any way to do this (easily)?
Provide a custom form to your 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
精彩评论