I'm not sure if this is a bug, feature request, or something else, so I thought I'd start here.
Summary: *python manage.py inspectdb* makes all fields with a default value *blank=True, null=True* I'm using: - Ubuntu 16.04 - Python 3.7.0 - Django 2.0.4 - Mariadb 10.2.16 Before I get into this, I realize that - "Django is best suited for developing new applications" - This probably isn't a huge deal or a high priority ...BUT I figured I'd submit this anyway while I was thinking about it. Maybe it'll save someone some extra work down the line. Steps to reproduce: - Setup a legacy db in *settings.py* (see https://docs.djangoproject.com/en/2.0/howto/legacy-databases/) - Prerequisite: you have a column in one of your tables that has a default value. - Example: *test_field int(11) *DEFAULT 1 - Run *python manage.py inspectdb [--database DATABASE_NAME [ TABLE ] ] > models.py* - Open *models.py* - *test_field* will look something like this: - *test_field* = models.IntegerField(*blank=True, null=True*) - What I would expect: - *test_field* = models.IntegerField(*default=1*) What I've been able to dig up: # from inspectdb.py <https://github.com/django/django/blob/master/django/core/management/commands/inspectdb.py#L144> (line 144, comments included in the original file) *142 # Add 'null' and 'blank', if the 'null_ok' flag was present in the* *143 # table description.* *144 if row[6]: # If it's NULL...* *145 extra_params['blank'] = True* *146 extra_params['null'] = True* # from introspection.py <https://github.com/django/django/blob/master/django/db/backends/mysql/introspection.py#L95 info.column_default> in *get_field_description *(line 95, comment is mine) *86 fields = []* *87 for line in cursor.description:* *88 info = field_info[line[0]]* *89 fields.append(FieldInfo(* *90 *line[:3],* *91** to_int(info.max_len) or line[3],* *92 to_int(info.num_prec) or line[4],* *93 to_int(info.num_scale) or line[5],* *94 line[6],* *95 info.column_default, # THIS LINE IS JUST WHATEVER THE COLUMN DEFAULT IS* *96 info.extra,* *97 info.is_unsigned,* *98 ))* *99 return fields* I'm sure there are a lot of things I don't understand about this, but I don't think that having a default value should automatically add *blank=True, null=True. * *Is having a default value really a "'null_ok' flag"?* I think it should only put *blank=True, null=True* if the default is set to *NULL* in the column. Otherwise, it should set the default to whatever the default value is (ex: *default=1*) Caveat: I've only tested this with int fields. Am I missing something? -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/django-users. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/8b20a83b-c54a-4fa4-b7fa-38ed8e2db35a%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.

