Why are blank and null distinct options for a django model?

前端 未结 2 622
闹比i
闹比i 2020-12-28 09:44

When defining fields in a django model, there are two ways to say that the field is allowed to be empty. null means it can be empty in the database, and

相关标签:
2条回答
  • 2020-12-28 09:59

    They have two entirely different meanings:

    blank: determines whether the field should be validated as required or not in forms. False means the form will generate an error if not provide, while True means empty values are allowed.

    null: determines whether the field should be set as NULL or NOT NULL at the DB level. This has nothing to do with form validation.

    Some examples:

    blank=True, null=False would raise an IntegrityError anytime the field was left blank, if it's not a CharField or TextField. Those two fields send '' (empty string) rather than NULL to the DB when empty.

    blank=False, null=True would always require the field to be filled out in all forms (forms will raise ValidationError on the field), even though the column is allowed to be NULL. However, this only applies to forms. You could manually set the attribute to None and save it outside of a form (in the shell, for example).

    0 讨论(0)
  • 2020-12-28 10:18

    null=False, blank=True is common for CharFields, where a blank answer is stored in the db as a blank string rather than a null. The other way around doesn't make much sense to use.

    For non-string fields, a non-answer is stored as a null, and so you need both.

    0 讨论(0)
提交回复
热议问题