Skip to content

Commit

Permalink
Added an option to add all many-to-many fields.
Browse files Browse the repository at this point in the history
  • Loading branch information
James Osgood committed Sep 23, 2014
1 parent 6f49e9f commit 8d86017
Showing 1 changed file with 11 additions and 3 deletions.
14 changes: 11 additions & 3 deletions simple_history/models.py
Expand Up @@ -51,6 +51,7 @@ def python_2_unicode_compatible(klass):
klass.__str__ = lambda self: self.__unicode__().encode('utf-8')
return klass

ALL_M2M_FIELDS = object()

registered_models = {}

Expand Down Expand Up @@ -94,11 +95,18 @@ def save_without_historical_record(self, *args, **kwargs):

def setup_m2m_history(self, cls):
m2m_history_fields = self.m2m_fields
if m2m_history_fields:
assert (isinstance(m2m_history_fields, list) or isinstance(m2m_history_fields, tuple)), 'm2m_history_fields must be a list or tuple'
if m2m_history_fields is ALL_M2M_FIELDS:
for field in cls._meta.many_to_many:
if not sum([isinstance(item, HistoricalRecords) for item in field.rel.through.__dict__.values()]):
field.rel.through.history = HistoricalRecords()
register(field.rel.through)
elif m2m_history_fields:
assert (isinstance(m2m_history_fields, list) or isinstance(m2m_history_fields, tuple)), \
'm2m_history_fields must be a list or tuple'
for field_name in m2m_history_fields:
field = getattr(cls, field_name).field
assert isinstance(field, models.fields.related.ManyToManyField), ('%s must be a ManyToManyField' % field_name)
assert isinstance(field, models.fields.related.ManyToManyField), \
('%s must be a ManyToManyField' % field_name)
if not sum([isinstance(item, HistoricalRecords) for item in field.rel.through.__dict__.values()]):
field.rel.through.history = HistoricalRecords()
register(field.rel.through)
Expand Down

0 comments on commit 8d86017

Please sign in to comment.