Summary
By now, we have completed two major forms, one to act as the contact form and another to handle the vehicle object, created in Chapter 3, Models, Relations, and Inheritance. We added a variety of fields and discussed the differences between those field types. Using the email example over and over again as we did, we witnessed how validation works in many different ways. Depending on the requirements gathered for a project, we can then decide on several different writing patterns to align with those requirements. For example, if we wanted to completely eliminate the need for JavaScript validation, such as using my favorite library jQuery Validate, we could just write clean methods in form classes to perform all of the validation on the backend. This would use the power of Django to serve up the error messages. However, if we did use JavaScript-based validation on the frontend, we could write fields that create the node attributes for us, such as the <input>
field attribute...