2017-06-29 14:19:33 +00:00
|
|
|
import uuid
|
|
|
|
|
|
2017-09-13 14:57:47 +00:00
|
|
|
from django.contrib.postgres.fields import ArrayField
|
2013-10-21 19:46:31 +00:00
|
|
|
from django.db import models
|
2013-11-07 16:02:31 +00:00
|
|
|
from auditlog.models import AuditlogHistoryField
|
2013-10-21 19:46:31 +00:00
|
|
|
from auditlog.registry import auditlog
|
|
|
|
|
|
2017-09-13 14:57:47 +00:00
|
|
|
from multiselectfield import MultiSelectField
|
|
|
|
|
|
2013-10-21 19:46:31 +00:00
|
|
|
|
2017-02-11 03:02:22 +00:00
|
|
|
@auditlog.register()
|
2013-10-21 19:46:31 +00:00
|
|
|
class SimpleModel(models.Model):
|
|
|
|
|
"""
|
|
|
|
|
A simple model with no special things going on.
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
text = models.TextField(blank=True)
|
|
|
|
|
boolean = models.BooleanField(default=False)
|
|
|
|
|
integer = models.IntegerField(blank=True, null=True)
|
|
|
|
|
datetime = models.DateTimeField(auto_now=True)
|
|
|
|
|
|
2013-11-07 16:02:31 +00:00
|
|
|
history = AuditlogHistoryField()
|
2013-10-21 19:46:31 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class AltPrimaryKeyModel(models.Model):
|
|
|
|
|
"""
|
|
|
|
|
A model with a non-standard primary key.
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
key = models.CharField(max_length=100, primary_key=True)
|
|
|
|
|
|
2013-10-23 15:10:59 +00:00
|
|
|
text = models.TextField(blank=True)
|
|
|
|
|
boolean = models.BooleanField(default=False)
|
|
|
|
|
integer = models.IntegerField(blank=True, null=True)
|
|
|
|
|
datetime = models.DateTimeField(auto_now=True)
|
|
|
|
|
|
2013-11-07 16:02:31 +00:00
|
|
|
history = AuditlogHistoryField(pk_indexable=False)
|
2013-10-21 19:46:31 +00:00
|
|
|
|
|
|
|
|
|
2017-06-29 14:19:33 +00:00
|
|
|
class UUIDPrimaryKeyModel(models.Model):
|
|
|
|
|
"""
|
|
|
|
|
A model with a UUID primary key.
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
|
|
|
|
|
|
|
|
|
|
text = models.TextField(blank=True)
|
|
|
|
|
boolean = models.BooleanField(default=False)
|
|
|
|
|
integer = models.IntegerField(blank=True, null=True)
|
|
|
|
|
datetime = models.DateTimeField(auto_now=True)
|
|
|
|
|
|
|
|
|
|
history = AuditlogHistoryField(pk_indexable=False)
|
|
|
|
|
|
|
|
|
|
|
2013-10-21 19:46:31 +00:00
|
|
|
class ProxyModel(SimpleModel):
|
|
|
|
|
"""
|
|
|
|
|
A model that is a proxy for another model.
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
proxy = True
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class RelatedModel(models.Model):
|
|
|
|
|
"""
|
|
|
|
|
A model with a foreign key.
|
|
|
|
|
"""
|
|
|
|
|
|
2018-01-02 18:50:45 +00:00
|
|
|
related = models.ForeignKey(to='self', on_delete=models.CASCADE)
|
2013-10-21 19:46:31 +00:00
|
|
|
|
2013-11-07 16:02:31 +00:00
|
|
|
history = AuditlogHistoryField()
|
2013-10-21 19:46:31 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class ManyRelatedModel(models.Model):
|
|
|
|
|
"""
|
|
|
|
|
A model with a many to many relation.
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
related = models.ManyToManyField('self')
|
|
|
|
|
|
2013-11-07 16:02:31 +00:00
|
|
|
history = AuditlogHistoryField()
|
2013-10-21 19:46:31 +00:00
|
|
|
|
|
|
|
|
|
2017-02-11 03:02:22 +00:00
|
|
|
@auditlog.register(include_fields=['label'])
|
2014-10-06 09:16:23 +00:00
|
|
|
class SimpleIncludeModel(models.Model):
|
|
|
|
|
"""
|
|
|
|
|
A simple model used for register's include_fields kwarg
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
label = models.CharField(max_length=100)
|
|
|
|
|
text = models.TextField(blank=True)
|
|
|
|
|
|
|
|
|
|
history = AuditlogHistoryField()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class SimpleExcludeModel(models.Model):
|
|
|
|
|
"""
|
|
|
|
|
A simple model used for register's exclude_fields kwarg
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
label = models.CharField(max_length=100)
|
|
|
|
|
text = models.TextField(blank=True)
|
|
|
|
|
|
|
|
|
|
history = AuditlogHistoryField()
|
|
|
|
|
|
|
|
|
|
|
2017-09-13 14:57:47 +00:00
|
|
|
class SimpleMappingModel(models.Model):
|
|
|
|
|
"""
|
|
|
|
|
A simple model used for register's mapping_fields kwarg
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
sku = models.CharField(max_length=100)
|
|
|
|
|
vtxt = models.CharField(verbose_name='Version', max_length=100)
|
|
|
|
|
not_mapped = models.CharField(max_length=100)
|
|
|
|
|
|
|
|
|
|
history = AuditlogHistoryField()
|
|
|
|
|
|
|
|
|
|
|
2015-06-03 15:49:03 +00:00
|
|
|
class AdditionalDataIncludedModel(models.Model):
|
2015-06-01 18:01:40 +00:00
|
|
|
"""
|
|
|
|
|
A model where get_additional_data is defined which allows for logging extra
|
|
|
|
|
information about the model in JSON
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
label = models.CharField(max_length=100)
|
|
|
|
|
text = models.TextField(blank=True)
|
2018-01-02 18:50:45 +00:00
|
|
|
related = models.ForeignKey(to=SimpleModel, on_delete=models.CASCADE)
|
2015-06-01 18:01:40 +00:00
|
|
|
|
|
|
|
|
history = AuditlogHistoryField()
|
|
|
|
|
|
|
|
|
|
def get_additional_data(self):
|
|
|
|
|
"""
|
|
|
|
|
Returns JSON that captures a snapshot of additional details of the
|
|
|
|
|
model instance. This method, if defined, is accessed by auditlog
|
|
|
|
|
manager and added to each logentry instance on creation.
|
|
|
|
|
"""
|
|
|
|
|
object_details = {
|
|
|
|
|
'related_model_id': self.related.id,
|
|
|
|
|
'related_model_text': self.related.text
|
|
|
|
|
}
|
|
|
|
|
return object_details
|
|
|
|
|
|
2017-01-11 19:07:10 +00:00
|
|
|
|
|
|
|
|
class DateTimeFieldModel(models.Model):
|
|
|
|
|
"""
|
|
|
|
|
A model with a DateTimeField, used to test DateTimeField
|
|
|
|
|
changes are detected properly.
|
|
|
|
|
"""
|
|
|
|
|
label = models.CharField(max_length=100)
|
|
|
|
|
timestamp = models.DateTimeField()
|
2017-09-13 14:57:47 +00:00
|
|
|
date = models.DateField()
|
|
|
|
|
time = models.TimeField()
|
2018-01-04 18:43:23 +00:00
|
|
|
naive_dt = models.DateTimeField(null=True, blank=True)
|
2017-09-13 14:57:47 +00:00
|
|
|
|
|
|
|
|
history = AuditlogHistoryField()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ChoicesFieldModel(models.Model):
|
|
|
|
|
"""
|
|
|
|
|
A model with a CharField restricted to a set of choices.
|
|
|
|
|
This model is used to test the changes_display_dict method.
|
|
|
|
|
"""
|
|
|
|
|
RED = 'r'
|
|
|
|
|
YELLOW = 'y'
|
|
|
|
|
GREEN = 'g'
|
|
|
|
|
|
|
|
|
|
STATUS_CHOICES = (
|
|
|
|
|
(RED, 'Red'),
|
|
|
|
|
(YELLOW, 'Yellow'),
|
|
|
|
|
(GREEN, 'Green'),
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
status = models.CharField(max_length=1, choices=STATUS_CHOICES)
|
|
|
|
|
multiselect = MultiSelectField(max_length=3, choices=STATUS_CHOICES, max_choices=3)
|
|
|
|
|
multiplechoice = models.CharField(max_length=3, choices=STATUS_CHOICES)
|
|
|
|
|
|
|
|
|
|
history = AuditlogHistoryField()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CharfieldTextfieldModel(models.Model):
|
|
|
|
|
"""
|
|
|
|
|
A model with a max length CharField and a Textfield.
|
|
|
|
|
This model is used to test the changes_display_dict
|
|
|
|
|
method's ability to truncate long text.
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
longchar = models.CharField(max_length=255)
|
|
|
|
|
longtextfield = models.TextField()
|
|
|
|
|
|
|
|
|
|
history = AuditlogHistoryField()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class PostgresArrayFieldModel(models.Model):
|
|
|
|
|
"""
|
|
|
|
|
Test auditlog with Postgres's ArrayField
|
|
|
|
|
"""
|
|
|
|
|
RED = 'r'
|
|
|
|
|
YELLOW = 'y'
|
|
|
|
|
GREEN = 'g'
|
|
|
|
|
|
|
|
|
|
STATUS_CHOICES = (
|
|
|
|
|
(RED, 'Red'),
|
|
|
|
|
(YELLOW, 'Yellow'),
|
|
|
|
|
(GREEN, 'Green'),
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
arrayfield = ArrayField(models.CharField(max_length=1, choices=STATUS_CHOICES), size=3)
|
2017-01-11 19:07:10 +00:00
|
|
|
|
|
|
|
|
history = AuditlogHistoryField()
|
|
|
|
|
|
|
|
|
|
|
2018-03-27 18:42:36 +00:00
|
|
|
class NoDeleteHistoryModel(models.Model):
|
|
|
|
|
integer = models.IntegerField(blank=True, null=True)
|
|
|
|
|
|
|
|
|
|
history = AuditlogHistoryField(delete_related=False)
|
|
|
|
|
|
|
|
|
|
|
2013-10-23 15:10:59 +00:00
|
|
|
auditlog.register(AltPrimaryKeyModel)
|
2017-06-29 14:19:33 +00:00
|
|
|
auditlog.register(UUIDPrimaryKeyModel)
|
2013-10-23 15:10:59 +00:00
|
|
|
auditlog.register(ProxyModel)
|
2015-05-15 13:14:57 +00:00
|
|
|
auditlog.register(RelatedModel)
|
|
|
|
|
auditlog.register(ManyRelatedModel)
|
|
|
|
|
auditlog.register(ManyRelatedModel.related.through)
|
2015-07-21 21:46:31 +00:00
|
|
|
auditlog.register(SimpleExcludeModel, exclude_fields=['text'])
|
2017-09-13 14:57:47 +00:00
|
|
|
auditlog.register(SimpleMappingModel, mapping_fields={'sku': 'Product No.'})
|
2015-06-03 15:49:03 +00:00
|
|
|
auditlog.register(AdditionalDataIncludedModel)
|
2017-01-11 19:07:10 +00:00
|
|
|
auditlog.register(DateTimeFieldModel)
|
2017-09-13 14:57:47 +00:00
|
|
|
auditlog.register(ChoicesFieldModel)
|
|
|
|
|
auditlog.register(CharfieldTextfieldModel)
|
|
|
|
|
auditlog.register(PostgresArrayFieldModel)
|
2018-03-27 18:42:36 +00:00
|
|
|
auditlog.register(NoDeleteHistoryModel)
|