Skip to content

Instantly share code, notes, and snippets.

@arescope
Created November 27, 2014 02:35
Show Gist options
  • Save arescope/3e422d14cd480fc8ca69 to your computer and use it in GitHub Desktop.
Save arescope/3e422d14cd480fc8ca69 to your computer and use it in GitHub Desktop.
diff --git a/tenancy/models.py b/tenancy/models.py
index 2cd16ac..097a1f0 100644
--- a/tenancy/models.py
+++ b/tenancy/models.py
@@ -27,7 +27,7 @@ from .managers import (AbstractTenantManager, TenantManager,
from .signals import lazy_class_prepared
from .utils import (
clear_opts_related_cache, disconnect_signals, get_model,
- receivers_for_model, remove_from_app_cache
+ receivers_for_model, remove_from_app_cache, remove_virtual_fields
)
@@ -456,6 +456,8 @@ class TenantModelBase(ModelBase):
rel.on_delete = on_delete
field.contribute_to_class(model, field.name)
+ remove_virtual_fields(model)
+
return model
def _prepare(self):
@@ -535,6 +537,8 @@ class TenantModelBase(ModelBase):
TenantModelBase, str(name), bases, attrs
)
+ remove_virtual_fields(model)
+
return model
def destroy(self):
diff --git a/tenancy/utils.py b/tenancy/utils.py
index e13edcd..0fe8e01 100644
--- a/tenancy/utils.py
+++ b/tenancy/utils.py
@@ -128,6 +128,15 @@ def unreference_model(model):
raise
+def remove_virtual_fields(model):
+ for field in model._meta.virtual_fields:
+ from .models import TenantModelBase
+ from django.contrib.contenttypes.generic import GenericRelation
+ if (isinstance(field, GenericRelation) and isinstance(field.rel.to, TenantModelBase)
+ and field.rel.to == field.rel.to._for_tenant_model):
+ model._meta.virtual_fields.remove(field)
+
+
model_sender_signals = (
models.signals.pre_init,
models.signals.post_init,
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment