TrackableModel

The TrackableModel is an abstract model that tracks changes to the model instances. It includes the following fields:

  • created_at: A DateTimeField that automatically stores the date and time when the instance is created.

  • updated_at: A DateTimeField that automatically stores the date and time when the instance is updated.

  • created_by: A ForeignKey that stores the user who created the instance.

  • updated_by: A ForeignKey that stores the user who updated the instance.

  • history: A JSONField that stores the history of changes to the instance.

The TrackableModel also includes a custom save method that updates the history field whenever an instance is saved.

class core.models.TrackableModel(*args, **kwargs)[source]

Abstract model that provides fields to automatically track changes and keep a record of who made them.

created_at

The timestamp when the model instance was first created.

Type:

DateTimeField

updated_at

The timestamp of the most recent update to the model instance.

Type:

DateTimeField

created_by

The user who created the model instance.

Type:

ForeignKey

updated_by

The user who last updated the model instance.

Type:

ForeignKey

history

A JSON field that stores a complete history of changes to the model instance, including timestamps and the user who made each change.

Type:

JSONField

clean()

Hook for doing any extra model-wide validation after clean() has been called on every field by self.clean_fields. Any ValidationError raised by this method will not be associated with a particular field; it will have a special-case association with the field defined by NON_FIELD_ERRORS.

clean_fields(exclude=None)

Clean all fields and raise a ValidationError containing a dict of all validation errors if any occur.

full_clean(exclude=None, validate_unique=True)

Call clean_fields(), clean(), and validate_unique() on the model. Raise a ValidationError for any errors that occur.

get_deferred_fields()

Return a set containing names of deferred fields for this instance.

refresh_from_db(using=None, fields=None)

Reload field values from the database.

By default, the reloading happens from the database this instance was loaded from, or by the read router if this instance wasn’t loaded from any database. The using parameter will override the default.

Fields can be used to specify which fields to reload. The fields should be an iterable of field attnames. If fields is None, then all non-deferred fields are reloaded.

When accessing deferred fields of an instance, the deferred loading of the field will call this method.

save_base(raw=False, force_insert=False, force_update=False, using=None, update_fields=None)

Handle the parts of saving which should be done only once per save, yet need to be done in raw saves, too. This includes some sanity checks and signal sending.

The ‘raw’ argument is telling save_base not to save any parent models and not to do any changes to the values before save. This is used by fixture loading.

serializable_value(field_name)

Return the value of the field name for this instance. If the field is a foreign key, return the id value instead of the object. If there’s no Field object with this name on the model, return the model attribute’s value.

Used to serialize a field’s value (in the serializer, or form output, for example). Normally, you would just access the attribute directly and not use this method.

validate_unique(exclude=None)

Check unique constraints on the model and raise ValidationError if any failed.