Django почему только строковое поле не может иметь значение null = true? - PullRequest
1 голос
/ 21 января 2020
If True, Django will store empty values as NULL in the database. Default is False.

Avoid using null on string-based fields such as CharField and TextField. 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;” the Django convention is to use the empty string, not NULL. One exception is when a CharField has both unique=True and blank=True set. In this situation, null=True is required to avoid unique constraint violations when saving multiple objects with blank values.
For both string-based and non-string-based 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).

- из django / docs -

Я понял, почему строковые поля не могут использовать null =true, но как насчет Integerfield или других полей? у них также может быть «два возможных значения для« nodata »», верно?

, и я узнал разницу между нулевой и пустой строкой. почему django не позволяет использовать как пустое, так и пустое поле для строковых полей? почему мы должны рассматривать как NULL, так и пустую строку как данные?

1 Ответ

1 голос
/ 21 января 2020

Django позволяет использовать NULL в строковых полях, рекомендуется избегать этого. Другими словами, Django в качестве соглашения рекомендует использовать '' для представления пустого значения для полей на основе строк.

Причиной этой рекомендации является избежание избыточности, поскольку в большинстве случаев оба значения (NULL и '') представляют одно и то же для строковых полей.

Теперь, если в вашем случае NULL и '' представляют разные вещи, то вам следует использовать NULL string поля на основе.

Так что не путайте «Разрешить» с «Предложением». Первый - это ограничение, а другой - хорошая практика.

...