Skip to content

Commit

Permalink
Change proxy models to inherit historical settings from their concret…
Browse files Browse the repository at this point in the history
…e parent
  • Loading branch information
macro1 committed Feb 8, 2015
1 parent 5330f60 commit 48412ea
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 4 deletions.
4 changes: 2 additions & 2 deletions simple_history/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,5 +29,5 @@ def register(
records.manager_name = manager_name
records.module = app and ("%s.models" % app) or model.__module__
records.add_extra_methods(model)
history_name = utils.natural_key_from_model(records.finalize(model))[1]
models.registered_models[natural_key] = history_name
records.concrete_natural_key = utils.natural_key_from_model(model._meta.concrete_model or model)
records.finalize(model)
15 changes: 13 additions & 2 deletions simple_history/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
from django.db.models.fields.proxy import OrderWrt
from django.db.models.fields.related import RelatedField
from django.db.models.related import RelatedObject
from django.db.models.loading import get_model
from django.conf import settings
from django.contrib import admin
from django.utils import importlib, six
Expand Down Expand Up @@ -48,7 +49,8 @@ def __init__(self, verbose_name=None, bases=(models.Model,),
def contribute_to_class(self, cls, name):
self.manager_name = name
self.module = cls.__module__
models.signals.class_prepared.connect(self.finalize, sender=cls)
self.concrete_natural_key = utils.natural_key_from_model(cls._meta.concrete_model or cls)
models.signals.class_prepared.connect(self.finalize)
self.add_extra_methods(cls)

def add_extra_methods(self, cls):
Expand All @@ -68,7 +70,16 @@ def save_without_historical_record(self, *args, **kwargs):
save_without_historical_record)

def finalize(self, sender, **kwargs):
history_model = self.create_history_model(sender)
if self.concrete_natural_key != utils.natural_key_from_model(sender._meta.concrete_model):
return
history_model_name = registered_models.get(self.concrete_natural_key)
if not history_model_name:
history_model = self.create_history_model(sender)
else:
try:
history_model = getattr(sender._meta.concrete_model, self.manager_name).model
except AttributeError: # possible during migrations
return
module = importlib.import_module(self.module)
setattr(module, history_model.__name__, history_model)

Expand Down

0 comments on commit 48412ea

Please sign in to comment.