在models.py中:
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
date_posted = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE)
image = models.ImageField(upload_to='post_pics', blank=True)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('post-detail', kwargs={'pk': self.pk})
我想在“图像”字段中添加ValidationError消息:
class PostCreateView(LoginRequiredMixin, CreateView):
model = Post
fields = ['title', 'content', 'image']
def form_valid(self, form):
form.instance.author = self.request.user
return super().form_valid(form)
如果用户在“图像”字段中上载其他内容,则不会提交表单,这很好,但是我想添加一些额外的消息,例如“仅图像..”。理想情况下,合并多个错误(大小或分辨率)。
我想将视图的结构保持为基于类的,因此无需进入form.py或创建基于函数的视图。
谢谢。
答案 0 :(得分:0)
Have you tried adding the validators into your model declaration?, for example:
from .validators import validate_image_filesize, validate_image_size, validate_image_name, validate_file_extension
image = models.ImageField(upload_to='post_pics', blank=True,
validators=[validate_image_filesize,
validate_image_size,
validate_image_name,
validate_file_extension])
Define them in your validators.py
file, for example:
def validate_file_extension(value):
extension = os.path.splitext(value.name)[1]
valid_extensions = ['.jpg', ]
if not extension.lower() in valid_extensions:
raise ValidationError(u'Format is not supported, '
u'allowed formats: {}'.format(', '.join(valid_extensions)))
Let me know if it works!,
答案 1 :(得分:0)
因此,看来似乎根本不需要验证程序或引发错误,谢谢您的建议,以便在模板中显示其他错误标签,因此解决方案非常简单:
post_form.html中的
.... {{form}}下方
{% if form.image.errors %}
<div class="alert alert-info">
{{ form.image.errors }}
</div>
{% endif %}