#25276: AlterField should raise an error when referenced field doesn't exist
--------------------------------------+------------------------------------
     Reporter:  Jacek Bzdak           |                    Owner:  nobody
         Type:  Cleanup/optimization  |                   Status:  new
    Component:  Migrations            |                  Version:  master
     Severity:  Normal                |               Resolution:
     Keywords:                        |             Triage Stage:  Accepted
    Has patch:  0                     |      Needs documentation:  0
  Needs tests:  0                     |  Patch needs improvement:  0
Easy pickings:  0                     |                    UI/UX:  0
--------------------------------------+------------------------------------
Description changed by Anton Samarchyan:

Old description:

> If I have following model in app ``foo``:
>
> {{{#!python
>
> class Foo(models.Model):
>   bar = modeld.CharField(max_length=500)
>
> }}}
>
> And I write (by hand) following migration:
>

> {{{#!python
>
> class Migration(migrations.Migration):
>
>     dependencies = [
>         ('foo', '0001_initial'),
>     ]
>
>     operations = [
>         migrations.AlterField(
>             model_name='foo',
>             name='baz', #Notice there is a typo in field name
>             field=modeld.CharField(max_length=100)
>         ),
>     ]
>
> }}}
>
> Currently this migration is a does nothing, however I feel that more
> appropriate action would be to notify user that he is trying to alter
> nonexistent field.
>
> Current implementation is a NOOP because (see:
> https://github.com/django/django/blob/master/django/db/migrations/operations/fields.py#L178)
> it is implemented in following way:
>
> {{{#!python
>        state.models[app_label, self.model_name_lower].fields = [
>             (n, field if n == self.name else f)
>             for n, f in
>             state.models[app_label, self.model_name_lower].fields
>         ]
>        state.reload_model(app_label, self.model_name_lower)
> }}}
>
> If someone says this is a sensible feature request I may modify migration
> code to raise if there is an error.
>
> I have actually lost some hours of my life due to this behaviour when I
> was writing a migration that moved models between applications.

New description:

 If I have following model in app `foo`:

 {{{#!python

 class Foo(models.Model):
   bar = models.CharField(max_length=500)

 }}}

 And I write (by hand) following migration:


 {{{#!python

 class Migration(migrations.Migration):

     dependencies = [
         ('foo', '0001_initial'),
     ]

     operations = [
         migrations.AlterField(
             model_name='foo',
             name='baz', #Notice there is a typo in field name
             field=modeld.CharField(max_length=100)
         ),
     ]

 }}}

 Currently this migration is a does nothing, however I feel that more
 appropriate action would be to notify user that he is trying to alter
 nonexistent field.

 Current implementation is a NOOP because (see:
 
https://github.com/django/django/blob/master/django/db/migrations/operations/fields.py#L178)
 it is implemented in following way:

 {{{#!python
        state.models[app_label, self.model_name_lower].fields = [
             (n, field if n == self.name else f)
             for n, f in
             state.models[app_label, self.model_name_lower].fields
         ]
        state.reload_model(app_label, self.model_name_lower)
 }}}

 If someone says this is a sensible feature request I may modify migration
 code to raise if there is an error.

 I have actually lost some hours of my life due to this behaviour when I
 was writing a migration that moved models between applications.

--

--
Ticket URL: <https://code.djangoproject.com/ticket/25276#comment:3>
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 [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/064.38d6794601099fe7abecdb2257b35baf%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to