#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.