In [1]:
# Setup django
import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'example.settings'
import django
django.setup()
In [2]:
from django.conf import settings
settings.DIFFS_SETTINGS
Out[2]:
In [3]:
from diffs.settings import diffs_settings
diffs_settings
Out[3]:
In [4]:
# create model and register via decorator
import diffs
from django.db import models
@diffs.register
class Report(models.Model):
name = models.CharField(max_length=255)
min_value = models.IntegerField()
max_value = models.IntegerField()
class Meta:
app_label = 'example'
In [5]:
# run migrate to create the tables
from django.core.management import call_command
call_command('makemigrations')
call_command('migrate')
In [6]:
# simple diff
report = Report(name='Python Report', min_value=10, max_value=100)
report.save()
In [7]:
print report.diffs
In [8]:
diff = report.diffs[0]
print diff.timestamp
print diff.data
print diff.created
Out[8]:
In [11]:
@diffs.register
class Report(models.Model):
name = models.CharField(max_length=255)
min_value = models.IntegerField()
max_value = models.IntegerField()
class Meta:
app_label = 'example'
def serialize_diff(self, dirty_fields):
if 'name' in dirty_fields:
return {'name': self.name}
else:
return None
In [12]:
report = Report(name='bay area report', min_value=5, max_value=7)
report.save()
In [13]:
report.min_value = 4
report.save()
In [14]:
report.diffs
Out[14]:
In [15]:
report.diffs[0].data
Out[15]:
In [16]:
# related models
@diffs.register
class ReportItem(models.Model):
report = models.ForeignKey('Report')
important_value = models.IntegerField()
status = models.CharField(max_length=255)
class Meta:
app_label = 'example'
def get_diff_parent(self):
return self.report
In [17]:
call_command('makemigrations')
call_command('migrate')
In [18]:
report_item = ReportItem(status='OK', important_value=9001, report=report)
report_item.save()
In [19]:
report.diffs
Out[19]:
In [20]:
for diff in report.diffs:
print diff.data
In [21]:
# query interface
sorted_set = Report.diffs.get_sortedset(report.id)
print sorted_set.min_score
print sorted_set.max_score
In [23]:
sorted_set.zrevrangebyscore('+inf', '-inf', withscores=True)
Out[23]:
In [ ]: