Add custom validation to a form field in Django 1.3, the form is created by the generic view CreateView.
class Picture(models.Model):
file = models.ImageField(upload_to=get_image_path)
filename = models.CharField(max_length=50, blank=True)
user = models.ForeignKey(User, editable=False)
upload_date = models.DateTimeField(auto_now_add=True,editable=False)
class PictureCreateView(CreateView):
model = Picture
def clean_file(self,form):
if image:
if image._size > settings.MAX_IMAGE_SIZE:
raise ValidationError("Image file too large ( > 20mb )")
else:
raise ValidationError("Couldn't read uploaded image")
def get_form(self, form_class):
form = super(PictureCreateView, self).get_form(form_class)
form.instance.user = self.request.user
return form
def form_invalid(self, form):
...omitted none important code...
response = JSONResponse(data, {}, response_mimetype(self.request))
response['Content-Disposition'] = 'inline; filename=files.json'
return response
# Called when we're sure all fields in the form are valid
def form_valid(self, form):
...omitted none important code...
response = JSONResponse(data, {}, response_mimetype(self.request))
response['Content-Disposition'] = 'inline; filename=files.json'
return response
According to the documentation here - https://docs.djangoproject.com/en/dev/ref/forms/validation/ I should be able to override the file fields form validator, which I'm trying to do with clean_file() "The clean_() method in a form subclass - where is replaced with the name of the form field attribute. " This would have been easy if I had created the form manually, but it's created by Django from the model by the generic view.
My current solution, which is a ugly hack: You can see that I've overridden form_valid() and form_invalid(), in form_valid() I now call clean_file() and if it's a error I call form_invalid(). This creates a few problems, for example I need to create the error message response manually.
CreateView. A view that displays a form for creating an object, redisplaying the form with validation errors (if there are any) and saving the object. This view inherits methods and attributes from the following views: django.
UpdateView refers to a view (logic) to update a particular instance of a table from the database with some extra details. It is used to update entries in the database, for example, updating an article at geeksforgeeks.
Use setCustomValidity() to set the message of the input affected to override the default message when the form is submitted. See the updated fiddle. As you can see in the fiddle, all you have to do is add an attribute data-equal-id wherein the attribute value must be the ID of password input element to be tested.
Hi Christopher 'form_class' is used in Django Class Based to depict the Form to be used in a class based view. See example in the docs: https://docs.djangoproject.com/en/2.1/topics/class-based-views/generic-editing/
Why not create your modelform ?
from django import forms
class PictureForm(forms.ModelForm):
def clean_file(self,form):
if image:
if image._size > settings.MAX_IMAGE_SIZE:
raise ValidationError("Image file too large ( > 20mb )")
else:
raise ValidationError("Couldn't read uploaded image")
class Meta:
model = Picture
Then you could use it in your view with the form_class attribute:
class PictureCreateView(CreateView):
form_class = PictureForm
# .... snip
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With