文件已存在时在管理面板中显示消息

时间:2019-01-31 11:42:18

标签: python django file validation model

我的问题是如何在admin django(v 1.11)中显示有关要放入应用程序中的文件存在的消息。

我已经编写了代码,但是它仅在模型中有效,即在控制台中您可以看到出现ValidationError

class ImageModel(BaseImageModel):
    desc = models.CharField(max_length=256, null=True, blank=True)

    def save(self, *args, **kwargs):
        self.has_all_mandatory_data = self._check_validity()
        if ImageModel.objects.filter(original_filename=self.file).exists():
            raise ValidationError('This image already exists.')
        super(ImageModel, self).save(*args, **kwargs)

如何在管理员messages.INFO("File already exists")而非ValidationError中显示?

1 个答案:

答案 0 :(得分:1)

如果您在save()方法提高ValidationError,那么它应该工作(你在控制台经验),但Django的管理不能很好地处理的,默认的服务器响应。

有一种变通方法,Django的管理可以很好地处理ValidationError从清洁的一个()的模型的方法提出,参见1.11:https://docs.djangoproject.com/en/1.11/ref/models/instances/#validating-objects

因此,我建议来编写用于存在逻辑检查在洁净的()方法之一即Django的为我们提供,而不是在save()方法写它。

class ImageModel(BaseImageModel):
  desc = models.CharField(max_length=256, null=True, blank=True)

  def clean(self):
    if ImageModel.objects.filter(original_filename=self.file).exists():
      raise ValidationError('This image already exists.')

  def save(self, *args, **kwargs):
    try:
      self.clean()
      super(ImageModel, self).save(*args, **kwargs)
    except ValidationError as e:
      non_field_errors = e.message_dict[NON_FIELD_ERRORS]