我的问题是如何在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
中显示?
答案 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]