djblets.db.fields.modification_timestamp_field¶
Field for managing modification timestamps for a model.
-
class
ModificationState
[source]¶ Bases:
object
Modification state for a tracked value.
-
first_set
¶ Whether or not the next
setattr()
will be the first.When this is
True
, we do not consider the nextsetattr()
to be a modification since the field will be set during model initialization.Type: bool
-
static
get_attr_name
(field_name)[source]¶ Return the attribute name for the state for the named field.
Parameters: field_name (unicode) – The attribute name of the ModificationTimestampField
.Returns: The name of the modification state attribute. Return type: unicode
-
-
class
ModificationTrackedValue
(field_name, state_name)[source]¶ Bases:
object
A descriptor for tracking the modification of a value.
-
field_name
¶ The attribute name of the field on the model.
Type: unicode
-
state_name
¶ The attribute name of the state on the model.
Type: unicode
-
__init__
(field_name, state_name)[source]¶ Initialize the descriptor.
Parameters: - field_name (unicode) – The name of the field attribute.
- state_name (unicode) – The name of the state attribute.
-
__get__
(instance, objtype=None)[source]¶ Return the value.
Parameters: - instance (django.db.models.Model) – The model instance.
- objtype (type, optional) – The model class.
Returns: The value.
Return type:
-
__set__
(instance, value)[source]¶ Set the value.
This tracks modifications and updates the state if this is not the first call to this method (which occurs during model initialization).
Parameters: - instance (django.db.models.Model) – The instance to set the the value on.
- value (datetime.datetime) – The value to set.state.first_set:
-
-
class
ModificationTimestampField
(*args, **kwargs)[source]¶ Bases:
django.db.models.fields.DateTimeField
A timestamp field that only updates existing objects or when None.
This is a subclass of
DateTimeField
that only auto-updates the timestamp when updating an existing object or when the value of the field is None. It’s similar to usingauto_now=True
, but custom timestamp values on new instances will not be replaced.-
__init__
(*args, **kwargs)[source]¶ Initialize the field.
Parameters: - *args (tuple) – Positional arguments for the field.
- **kwargs (dict) – Additional keyword arguments for the field.
-
contribute_to_class
(cls, name)[source]¶ Contribute the field attributes to the class.
Parameters: - cls (type) – The model class to contribute the field to.
- name (unicode) – The name of the field.
-
pre_save
(model_instance, add)[source]¶ Return the value of the field just before saving.
Parameters: - model_instance (django.db.models.Model) – The model instance being saved.
- add (bool) – Whether this is being saved to the database for the first time.
Returns: The date/time value being saved.
Return type:
-