mirror of
https://github.com/ansible/awx.git
synced 2026-05-20 07:17:40 -02:30
Added support in ImplicitRoleField to handle following reverse m2m maps
This commit is contained in:
@@ -211,7 +211,8 @@ class ImplicitRoleField(models.ForeignKey):
|
|||||||
first_field_name = field_name.split('.')[0]
|
first_field_name = field_name.split('.')[0]
|
||||||
field = getattr(cls, first_field_name)
|
field = getattr(cls, first_field_name)
|
||||||
|
|
||||||
if type(field) is ReverseManyRelatedObjectsDescriptor:
|
if type(field) is ReverseManyRelatedObjectsDescriptor or \
|
||||||
|
type(field) is ManyRelatedObjectsDescriptor:
|
||||||
if found_m2m_field:
|
if found_m2m_field:
|
||||||
# This limitation is due to a lack of understanding on my part, the
|
# This limitation is due to a lack of understanding on my part, the
|
||||||
# trouble being that I can't seem to get m2m_changed to call anything that
|
# trouble being that I can't seem to get m2m_changed to call anything that
|
||||||
@@ -227,14 +228,17 @@ class ImplicitRoleField(models.ForeignKey):
|
|||||||
found_m2m_field = True
|
found_m2m_field = True
|
||||||
self.m2m_field_name = first_field_name
|
self.m2m_field_name = first_field_name
|
||||||
self.m2m_field_attr = field_name.split('.',1)[1]
|
self.m2m_field_attr = field_name.split('.',1)[1]
|
||||||
m2m_changed.connect(self.m2m_update, field.through)
|
|
||||||
|
|
||||||
if type(field) is ManyRelatedObjectsDescriptor:
|
if type(field) is ReverseManyRelatedObjectsDescriptor:
|
||||||
raise Exception('ManyRelatedObjectsDescriptor references are currently unsupported ' +
|
m2m_changed.connect(self.m2m_update, field.through)
|
||||||
'(but the reverse is, so supporting this is probably easy to add)): %s.%s' %
|
else:
|
||||||
(cls.__name__, first_field_name))
|
m2m_changed.connect(self.m2m_update_related, field.related.through)
|
||||||
|
|
||||||
|
|
||||||
|
def m2m_update_related(self, **kwargs):
|
||||||
|
kwargs['reverse'] = not kwargs['reverse']
|
||||||
|
self.m2m_update(**kwargs)
|
||||||
|
|
||||||
def m2m_update(self, sender, instance, action, reverse, model, pk_set, **kwargs):
|
def m2m_update(self, sender, instance, action, reverse, model, pk_set, **kwargs):
|
||||||
if action == 'post_add' or action == 'pre_remove':
|
if action == 'post_add' or action == 'pre_remove':
|
||||||
if reverse:
|
if reverse:
|
||||||
|
|||||||
Reference in New Issue
Block a user