mirror of
https://github.com/jazzband/django-auditlog.git
synced 2026-04-15 12:31:06 +00:00
Set history delete_related to False by default (#557)
This is a breaking change. The default behavior is to delete the related objects, but it doesn't make sense to apply it to audit log entries, at least not by default.
This commit is contained in:
parent
47188b46d7
commit
ab65364bb4
3 changed files with 19 additions and 20 deletions
|
|
@ -5,6 +5,7 @@
|
|||
#### Breaking Changes
|
||||
|
||||
- feat: stop deleting old log entries when a model with the same pk is created (i.e. the pk value is reused) ([#559](https://github.com/jazzband/django-auditlog/pull/559))
|
||||
- feat: Set `AuditlogHistoryField.delete_related` to `False` by default. This is different from the default configuration of Django's `GenericRelation`, but we should not erase the audit log of objects on deletion by default. ([#557](https://github.com/jazzband/django-auditlog/pull/557))
|
||||
|
||||
#### Improvements
|
||||
|
||||
|
|
|
|||
|
|
@ -503,14 +503,12 @@ class AuditlogHistoryField(GenericRelation):
|
|||
|
||||
:param pk_indexable: Whether the primary key for this model is not an :py:class:`int` or :py:class:`long`.
|
||||
:type pk_indexable: bool
|
||||
:param delete_related: By default, including a generic relation into a model will cause all related
|
||||
objects to be cascade-deleted when the parent object is deleted. Passing False to this overrides this
|
||||
behavior, retaining the full auditlog history for the object. Defaults to True, because that's
|
||||
Django's default behavior.
|
||||
:param delete_related: Delete referenced auditlog entries together with the tracked object.
|
||||
Defaults to False to keep the integrity of the auditlog.
|
||||
:type delete_related: bool
|
||||
"""
|
||||
|
||||
def __init__(self, pk_indexable=True, delete_related=True, **kwargs):
|
||||
def __init__(self, pk_indexable=True, delete_related=False, **kwargs):
|
||||
kwargs["to"] = LogEntry
|
||||
|
||||
if pk_indexable:
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ class SimpleModel(models.Model):
|
|||
integer = models.IntegerField(blank=True, null=True)
|
||||
datetime = models.DateTimeField(auto_now=True)
|
||||
|
||||
history = AuditlogHistoryField()
|
||||
history = AuditlogHistoryField(delete_related=True)
|
||||
|
||||
|
||||
class AltPrimaryKeyModel(models.Model):
|
||||
|
|
@ -35,7 +35,7 @@ class AltPrimaryKeyModel(models.Model):
|
|||
integer = models.IntegerField(blank=True, null=True)
|
||||
datetime = models.DateTimeField(auto_now=True)
|
||||
|
||||
history = AuditlogHistoryField(pk_indexable=False)
|
||||
history = AuditlogHistoryField(delete_related=True, pk_indexable=False)
|
||||
|
||||
|
||||
class UUIDPrimaryKeyModel(models.Model):
|
||||
|
|
@ -50,7 +50,7 @@ class UUIDPrimaryKeyModel(models.Model):
|
|||
integer = models.IntegerField(blank=True, null=True)
|
||||
datetime = models.DateTimeField(auto_now=True)
|
||||
|
||||
history = AuditlogHistoryField(pk_indexable=False)
|
||||
history = AuditlogHistoryField(delete_related=True, pk_indexable=False)
|
||||
|
||||
|
||||
class ProxyModel(SimpleModel):
|
||||
|
|
@ -80,7 +80,7 @@ class RelatedModel(RelatedModelParent):
|
|||
to="SimpleModel", on_delete=models.CASCADE, related_name="reverse_one_to_one"
|
||||
)
|
||||
|
||||
history = AuditlogHistoryField()
|
||||
history = AuditlogHistoryField(delete_related=True)
|
||||
|
||||
|
||||
class ManyRelatedModel(models.Model):
|
||||
|
|
@ -91,7 +91,7 @@ class ManyRelatedModel(models.Model):
|
|||
recursive = models.ManyToManyField("self")
|
||||
related = models.ManyToManyField("ManyRelatedOtherModel", related_name="related")
|
||||
|
||||
history = AuditlogHistoryField()
|
||||
history = AuditlogHistoryField(delete_related=True)
|
||||
|
||||
def get_additional_data(self):
|
||||
related = self.related.first()
|
||||
|
|
@ -103,7 +103,7 @@ class ManyRelatedOtherModel(models.Model):
|
|||
A model related to ManyRelatedModel as many-to-many.
|
||||
"""
|
||||
|
||||
history = AuditlogHistoryField()
|
||||
history = AuditlogHistoryField(delete_related=True)
|
||||
|
||||
|
||||
@auditlog.register(include_fields=["label"])
|
||||
|
|
@ -115,7 +115,7 @@ class SimpleIncludeModel(models.Model):
|
|||
label = models.CharField(max_length=100)
|
||||
text = models.TextField(blank=True)
|
||||
|
||||
history = AuditlogHistoryField()
|
||||
history = AuditlogHistoryField(delete_related=True)
|
||||
|
||||
|
||||
class SimpleExcludeModel(models.Model):
|
||||
|
|
@ -126,7 +126,7 @@ class SimpleExcludeModel(models.Model):
|
|||
label = models.CharField(max_length=100)
|
||||
text = models.TextField(blank=True)
|
||||
|
||||
history = AuditlogHistoryField()
|
||||
history = AuditlogHistoryField(delete_related=True)
|
||||
|
||||
|
||||
class SimpleMappingModel(models.Model):
|
||||
|
|
@ -138,7 +138,7 @@ class SimpleMappingModel(models.Model):
|
|||
vtxt = models.CharField(verbose_name="Version", max_length=100)
|
||||
not_mapped = models.CharField(max_length=100)
|
||||
|
||||
history = AuditlogHistoryField()
|
||||
history = AuditlogHistoryField(delete_related=True)
|
||||
|
||||
|
||||
@auditlog.register(mask_fields=["address"])
|
||||
|
|
@ -150,7 +150,7 @@ class SimpleMaskedModel(models.Model):
|
|||
address = models.CharField(max_length=100)
|
||||
text = models.TextField()
|
||||
|
||||
history = AuditlogHistoryField()
|
||||
history = AuditlogHistoryField(delete_related=True)
|
||||
|
||||
|
||||
class AdditionalDataIncludedModel(models.Model):
|
||||
|
|
@ -163,7 +163,7 @@ class AdditionalDataIncludedModel(models.Model):
|
|||
text = models.TextField(blank=True)
|
||||
related = models.ForeignKey(to=SimpleModel, on_delete=models.CASCADE)
|
||||
|
||||
history = AuditlogHistoryField()
|
||||
history = AuditlogHistoryField(delete_related=True)
|
||||
|
||||
def get_additional_data(self):
|
||||
"""
|
||||
|
|
@ -190,7 +190,7 @@ class DateTimeFieldModel(models.Model):
|
|||
time = models.TimeField()
|
||||
naive_dt = models.DateTimeField(null=True, blank=True)
|
||||
|
||||
history = AuditlogHistoryField()
|
||||
history = AuditlogHistoryField(delete_related=True)
|
||||
|
||||
|
||||
class ChoicesFieldModel(models.Model):
|
||||
|
|
@ -212,7 +212,7 @@ class ChoicesFieldModel(models.Model):
|
|||
status = models.CharField(max_length=1, choices=STATUS_CHOICES)
|
||||
multiplechoice = models.CharField(max_length=255, choices=STATUS_CHOICES)
|
||||
|
||||
history = AuditlogHistoryField()
|
||||
history = AuditlogHistoryField(delete_related=True)
|
||||
|
||||
|
||||
class CharfieldTextfieldModel(models.Model):
|
||||
|
|
@ -225,7 +225,7 @@ class CharfieldTextfieldModel(models.Model):
|
|||
longchar = models.CharField(max_length=255)
|
||||
longtextfield = models.TextField()
|
||||
|
||||
history = AuditlogHistoryField()
|
||||
history = AuditlogHistoryField(delete_related=True)
|
||||
|
||||
|
||||
class PostgresArrayFieldModel(models.Model):
|
||||
|
|
@ -247,7 +247,7 @@ class PostgresArrayFieldModel(models.Model):
|
|||
models.CharField(max_length=1, choices=STATUS_CHOICES), size=3
|
||||
)
|
||||
|
||||
history = AuditlogHistoryField()
|
||||
history = AuditlogHistoryField(delete_related=True)
|
||||
|
||||
|
||||
class NoDeleteHistoryModel(models.Model):
|
||||
|
|
|
|||
Loading…
Reference in a new issue