Fix the m2m_changed when accessed reversed

This commit is contained in:
Wayne Witzel III
2016-03-11 15:59:01 -05:00
parent 45483fb057
commit 16673b1468
2 changed files with 7 additions and 3 deletions

View File

@@ -204,11 +204,15 @@ class ImplicitRoleField(models.ForeignKey):
else: else:
sender = field.related.through sender = field.related.through
m2m_changed.connect(self.m2m_update(field_attr), sender, weak=False) reverse = type(field) is ManyRelatedObjectsDescriptor
m2m_changed.connect(self.m2m_update(field_attr, reverse), sender, weak=False)
def m2m_update(self, field_attr): def m2m_update(self, field_attr, _reverse):
def _m2m_update(instance, action, model, pk_set, reverse, **kwargs): def _m2m_update(instance, action, model, pk_set, reverse, **kwargs):
if action == 'post_add' or action == 'pre_remove': if action == 'post_add' or action == 'pre_remove':
if _reverse:
reverse = not reverse
if reverse: if reverse:
for pk in pk_set: for pk in pk_set:
obj = model.objects.get(pk=pk) obj = model.objects.get(pk=pk)

View File

@@ -69,7 +69,7 @@ def test_cant_delete_role(delete, admin):
# Some day we might want to do this, but until that is speced out, lets # Some day we might want to do this, but until that is speced out, lets
# ensure we don't slip up and allow this implicitly through some helper or # ensure we don't slip up and allow this implicitly through some helper or
# another # another
response = delete(reverse('api:role_detail', args=(admin.resource.admin_role.id,)), admin) response = delete(reverse('api:role_detail', args=(admin.admin_role.id,)), admin)
assert response.status_code == 405 assert response.status_code == 405