From c6b2e509fd16e462de4e169c20920d1d44579762 Mon Sep 17 00:00:00 2001 From: Akita Noek Date: Fri, 29 Jan 2016 18:22:08 -0500 Subject: [PATCH] Fixed ImplicitRoleField and ImplicitResourceField's from being too lazy This ensures that the role and resource fields get created and bound automatically without having to explicitly access them a first time. --- awx/main/fields.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/awx/main/fields.py b/awx/main/fields.py index f6afd7581e..e5210b423b 100644 --- a/awx/main/fields.py +++ b/awx/main/fields.py @@ -2,6 +2,7 @@ # All Rights Reserved. # Django +from django.db.models.signals import post_save, post_init from django.db import models from django.db.models.fields.related import SingleRelatedObjectDescriptor from django.db.models.fields.related import ReverseSingleRelatedObjectDescriptor @@ -91,7 +92,11 @@ class ImplicitResourceField(models.ForeignKey): def contribute_to_class(self, cls, name): super(ImplicitResourceField, self).contribute_to_class(cls, name) setattr(cls, self.name, ResourceFieldDescriptor(self.parent_resource, self)) + post_save.connect(self._save, cls, True) + def _save(self, instance, *args, **kwargs): + # Ensure that our field gets initialized after our first save + getattr(instance, self.name) class ImplicitRoleDescriptor(ReverseSingleRelatedObjectDescriptor): @@ -185,4 +190,8 @@ class ImplicitRoleField(models.ForeignKey): self ) ) + post_save.connect(self._save, cls, True) + def _save(self, instance, *args, **kwargs): + # Ensure that our field gets initialized after our first save + getattr(instance, self.name)