{{{
#!python
PERM_DEFS = {
('perm1', 'Desc1') : 123,
('perm2', 'Desc2') : 321
}
class Spam(models.Model):
class Meta:
permissions = list(PERM_DEFS.keys())
}}}
Currently, running `makemigrations` will always generate a new migration
even though the permissions list doesn't change. Perhaps the inspector
could do a `set(old_attr) == set(new_attr)` type operation on list style
attributes such as `permissions` and `default_permissions`.
Current workaround is: `permissions = list(sorted(PERM_DEFS.keys()))`
--
Ticket URL: <https://code.djangoproject.com/ticket/23628>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
* needs_better_patch: => 0
* needs_tests: => 0
* needs_docs: => 0
Comment:
Hi,
This actually depends on your Python version.
On Python 3.3 and later, the order of dictionaries will change between
different runs (that feature is called "hash randomization" if you want to
look deeper).
On earlier versions of Python though, that order is consistent so the
autodetector doesn't see any changes and no new migrations are created.
I'm not sure if this warrants the additional code complexity.
If you need a consistent order here you could use an `OrderedDict` or user
`permissions = sorted(PERM_DEFS.keys())`.
--
Ticket URL: <https://code.djangoproject.com/ticket/23628#comment:1>
Comment (by Naddiseo):
I don't think there's that much extra complexity: one possible solution:
https://github.com/django/django/pull/3356
--
Ticket URL: <https://code.djangoproject.com/ticket/23628#comment:2>
* status: new => closed
* resolution: => wontfix
Comment:
I don't think there's a good reason to say the ordering of permissions
isn't important. For example, you might have a migration that indexes the
permissions tuple to get a particular permission. Using `sorted()` as
Baptiste suggested seems like the best solution to me.
--
Ticket URL: <https://code.djangoproject.com/ticket/23628#comment:3>