In Django models.py, what's the difference between default, null, and blank?
database, django, integer, python, string
Solution
Direct from Django model field reference:
`Field.null`
If `True`, Django will store empty values as `NULL` in the database. Default is `False`.
Note that empty string values will always get stored as empty strings, not as `NULL`. Only use `null=True` for non-string fields such as integers, booleans and dates. For both types of fields, you will also need to set `blank=True` if you wish to permit empty values in forms, as the `null` parameter only affects database storage (see `blank`).
Avoid using `null` on string-based fields such as `CharField` and `TextField` unless you have an excellent reason. If a string-based field has `null=True`, that means it has two possible values for “no data”: NULL, and the empty string. In most cases, it’s redundant to have two possible values for “no data;” Django convention is to use the empty string, not `NULL`.
`Field.blank`
If `True`, the field is allowed to be blank. Default is `False`.
Note that this is different than `null`. `null` is purely database-related, whereas `blank` is validation-related. If a field has `blank=True`, validation on Django’s admin site will allow entry of an empty value. If a field has `blank=False`, the field will be required.
`Field.default`
The default value for the field. This can be a value or a callable object. If callable it will be called every time a new object is created.
Problem
- `null=True` - `blank=True` - `default = 0` What's the difference? When do you use what?