Search icon
Arrow left icon
All Products
Best Sellers
New Releases
Books
Videos
Audiobooks
Learning Hub
Newsletters
Free Learning
Arrow right icon
Web Development with Django

You're reading from  Web Development with Django

Product type Book
Published in Feb 2021
Publisher Packt
ISBN-13 9781839212505
Pages 826 pages
Edition 1st Edition
Languages
Authors (5):
Ben Shaw Ben Shaw
Profile icon Ben Shaw
Saurabh Badhwar Saurabh Badhwar
Profile icon Saurabh Badhwar
Andrew Bird Andrew Bird
Profile icon Andrew Bird
Bharath Chandra K S Bharath Chandra K S
Profile icon Bharath Chandra K S
Chris Guest Chris Guest
Profile icon Chris Guest
View More author details

Table of Contents (17) Chapters

Preface
1. Introduction to Django 2. Models and Migrations 3. URL Mapping, Views, and Templates 4. Introduction to Django Admin 5. Serving Static Files 6. Forms 7. Advanced Form Validation and Model Forms 8. Media Serving and File Uploads 9. Sessions and Authentication 10. Advanced Django Admin and Customizations 11. Advanced Templating and Class-Based Views 12. Building a REST API 13. Generating CSV, PDF, and Other Binary Files 14. Testing 15. Django Third-Party Libraries 16. Using a Frontend JavaScript Library with Django

7. Advanced Form Validation and Model Forms

Overview

Continuing your journey with the Bookr application, you will begin this chapter by adding a new form to your app with custom multi-field validation and form cleaning. You will learn how to set the initial values on your form and customize the widgets (the HTML input elements that are being generated). Then you will be introduced to the ModelForm class, which allows a form to be automatically created from a model. You will use it in a view to automatically save the new or changed Model instance.

By the end of this chapter, you will know how to add extra multi-field validation to Django forms, how to customize and set form widgets for fields, how to use ModelForms to automatically create a form from a Django model, and how to automatically create Model instances from ModelForms.

Introduction

This chapter builds upon the knowledge we gained in Chapter 6, Forms, where we learned how to submit data from an HTML form to a Django view, both with a manually built HTML form and with a Django form. We used Django's form library to build and automatically validate forms with basic validation. For example, now we can build forms that check whether a date is entered in its desired format, whether a number is input where a user must enter their age, and whether a dropdown is selected before the user clicks the Submit button. However, most large-scale websites require validation that is a bit more advanced.

For instance, a certain field might only be required if another field is set. Let's say we want to add a checkbox to allow users to sign up for our monthly newsletter. It has a textbox below it that lets them enter their email address. With some basic validation, we can check whether:

  • The user has checked the checkbox.
  • The user has entered their...

Custom Field Validation and Cleaning

We have seen how a Django form converts values from an HTTP request, which are strings, into Python objects. In a non-custom Django form, the target type is dependent on the field class. For example, the Python type derived from IntegerField is int, and string values are given to us verbatim, as the user entered them. But we can also implement methods on our Form class to alter the output values from our fields in any way we choose. The allows us to clean or filter the user's input data to fit what we expect better. We could round an integer to the nearest multiple of ten to fit into a batch size for ordering specific items. Or we could transform an email address to lowercase so that the data is consistent for searching.

We can also implement some custom validators. We will look at a couple of different ways of validating fields: by writing a custom validator, and by writing a custom clean method for the field. Each method has its pros and...

Summary

This chapter was a deep dive into forms. We saw how to enhance Django forms with custom validation advanced rules for cleaning data and validating fields. We saw how custom cleaning methods can transform the data that we get out of forms. A nice feature we saw that can be added to forms is the ability to set initial and placeholder values on fields, so the user does not have to fill them out.

We then looked at how to use the ModelForm class to automatically create a form from a Django model. We saw how to only show some fields to the user and how to apply custom form validation rules to the ModelForm. We also saw how Django can automatically save the new or updated model instance to the database inside the view. In the activities for this chapter, we enhanced Bookr some more by adding forms for creating and editing publishers and submitting reviews. The next chapter will carry on the theme of submitting user input, and along with that, we'll discuss how Django handles...

lock icon The rest of the chapter is locked
You have been reading a chapter from
Web Development with Django
Published in: Feb 2021 Publisher: Packt ISBN-13: 9781839212505
Register for a free Packt account to unlock a world of extra content!
A free Packt account unlocks extra newsletters, articles, discounted offers, and much more. Start advancing your knowledge today.
Unlock this book and the full library FREE for 7 days
Get unlimited access to 7000+ expert-authored eBooks and videos courses covering every tech area you can think of
Renews at $15.99/month. Cancel anytime}