#32799: Inconsistency regarding the default value of CharField
-------------------------------------+-------------------------------------
               Reporter:  Adam       |          Owner:  nobody
  Sołtysik                           |
                   Type:             |         Status:  new
  Uncategorized                      |
              Component:  Database   |        Version:  3.2
  layer (models, ORM)                |
               Severity:  Normal     |       Keywords:
           Triage Stage:             |      Has patch:  0
  Unreviewed                         |
    Needs documentation:  0          |    Needs tests:  0
Patch needs improvement:  0          |  Easy pickings:  0
                  UI/UX:  0          |
-------------------------------------+-------------------------------------
 Let's assume I want to add a `CharField` to a model:

 {{{
 class Test(Model):
     # other fields
     name = CharField(max_length=20)
 }}}

 This field is non-nullable and has no default value. However, when an
 object is created, the field gets an empty string automatically:

 {{{
 >>> Test().name
 ''
 }}}

 When such an object is saved, an empty string will be saved to the
 database. The same happens when I call `Test.objects.create()`.

 On the other hand, when I create a migration, Django asks me to provide a
 default. If I omit a default value and try to execute the migration, there
 will be `IntegrityError` due to the `NOT NULL` constraint.

 So the question is: why does `CharField` behave differently in the
 contexts of Python objects and migrations? The same goes also for
 `FileField`, but not e.g. for non-nullable `IntegerField` (it won't get a
 value of `0` automatically).

 Changing the behaviour of objects with `CharField` would be a breaking
 change, but for consistency, I think that migrations should also infer the
 empty string as the default value, even when there is no `default=''` or
 `blank=True`.

 Possibly related: #23405.

-- 
Ticket URL: <https://code.djangoproject.com/ticket/32799>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-updates+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/050.491ed21bfade3bc63b6c4de99c140770%40djangoproject.com.

Reply via email to