Представьте себе такую модель:
class CFile(models.Model):
filepath = models.FileField(upload_to=...)
collection = models.ForeignKey("FileCollection",null=True)
... # other attributes that are not relevant
def clean(self):
bname = os.path.basename
if self.collection:
cfiles = self.baseline.attachment_set.all()
with_same_basename = filter(lambda e: bname(e.filepath.path) == bname(self.filepath.path),cfiles)
if len(with_same_basename) > 0:
raise ValidationError("There already exists a file with the same name in this collection")
class FileCollection(models.Model):
name = models.CharField(max_length=255)
files= models.ManyToManyField("CFile")
Я хочу запретить загрузку CFile, если уже существует CFile с тем же базовым именем, поэтому я добавил clean
.Проблема:
- Я загружаю CFile с именем
file1.png
-> загружается, потому что других файлов с таким именем не существует - Я загружаю другой CFile с именем
file1.png
-> Я получаю ожидаемую ошибку, что у меня уже есть файл с этим именем.Итак, я пытаюсь изменить файл и загрузить файл с другим именем (file2.png
).Проблема в том, что я остановился через pdb в чистом виде, а экземпляр модели все еще file1.png
.Я полагаю, что это происходит из-за моей ошибки ValidationError, и django позволяет мне «исправить мою ошибку».Проблема в том, что я не могу исправить это, если я не могу загрузить другой файл.Как я могу справиться с этим?
РЕДАКТИРОВАТЬ: Это происходит в административной области, извините за забыв упомянуть об этом раньше.У меня нет ничего кастомного (кроме inlines = [ FileInline ]
).