#23405: Blank-able CharFields require default=''
----------------------------+------------------------------------
     Reporter:  yuvadm      |                    Owner:  coldmind
         Type:  Bug         |                   Status:  assigned
    Component:  Migrations  |                  Version:  1.7
     Severity:  Normal      |               Resolution:
     Keywords:              |             Triage Stage:  Accepted
    Has patch:  1           |      Needs documentation:  0
  Needs tests:  0           |  Patch needs improvement:  0
Easy pickings:  0           |                    UI/UX:  0
----------------------------+------------------------------------

Comment (by coldmind):

 {{{
 <truecoldmind> MarkusH, consider the field
 models.CharField(max_length=100, null=True, blank=True). In that case
 default after deconstruct will be empty string, this is not correct.
 <truecoldmind>  The check can be "if self.blank and not self.null and
 self.default is NOT_PROVIDED"
 <MarkusH> truecoldmind: what has blank to do with database default anyway?
 <MarkusH> but I agree, you need to check for null
 * ojii has quit (Quit: Leaving)
 <truecoldmind> I'm thinking due to
 https://docs.djangoproject.com/en/dev/ref/models/fields/#null. Docs
 recommends to not use `null=True` for char and text fields. It may not be
 obvious that `blank=True` without `null` will give empty string, but, we
 should definitely not set empty string as default if neither `blank` nor
 the `null` was specified
 <MarkusH> blank is only used for form validation, iirc
 <truecoldmind> Yup. But, if no `blank` and `null` specified, user must
 specify default by himself. We are now returned to South behavior (it sets
 empty string if only `blank` was specified), but I don't know how to make
 thing to be obvious
 <MarkusH> truecoldmind: which turns us back to one of my previous
 questions: Django's migrations are not equal to South's. Do we want to
 have the same behavior here?
 * tonebot has quit (Remote host closed the connection)
 * tonebot (~node...@ec2-54-161-155-85.compute-1.amazonaws.com) has joined
 #django-dev
 <truecoldmind> MarkusH, it will be good (reasons are explained in
 https://code.djangoproject.com/ticket/23405#comment:5). Due to
 https://docs.djangoproject.com/en/dev/ref/models/fields/#blank,  `blank`
 is not necessarily associated with forms
 <truecoldmind> So I think that check in deconstuct "if self.blank and not
 self.null and self.default is NOT_PROVIDED" will be right
 <MarkusH> truecoldmind: gnaah, sorry. Missed half the comment when reading
 if before.
 <MarkusH> not self.has_default() instead, right?
 <MarkusH> but yes, that should work
 <truecoldmind> MarkusH, okay, thanks for conversation. I will do more
 research about how changes in deconstruct will affect migrations and
 update PR later
 <MarkusH> Thank you for tackling the issue
 }}}

--
Ticket URL: <https://code.djangoproject.com/ticket/23405#comment:14>
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 post to this group, send email to django-updates@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/064.f4968526e108cbd9d2d657d2e14c5896%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to