Отображать сообщение в панели администратора, когда файл уже существует - PullRequest
0 голосов
/ 31 января 2019

Моя проблема в том, как я могу отобразить в админке 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 голосов
/ 31 января 2019

Если вы вызываете ValidationError в методе save (), то он должен работать (то, что вы испытываете в консоли), но администратор Django не может красиво обработать такой ответ сервера по умолчанию.

Существует обходной путь, администратор Djangoможет приятно обрабатывать ValidationError, вызванный одним из методов clean () модели, см. для 1.11: https://docs.djangoproject.com/en/1.11/ref/models/instances/#validating-objects.

Таким образом, я бы предложил написать вашу проверку на наличие логики в одном из методов clean ()что нам предоставляет 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...