Skip to content

MonitorField value when the instance is created #352

@alb3rto269

Description

@alb3rto269

Problem

MonitoField works without issues when the instance is updated. However, when an instance is created the value is not set.

e.g.

class MyModel(StatusModel):
    STATUS = Choices('in_progress', 'success', 'error')

    finished = MonitorField(
        monitor='status',
        when=['success', 'error',],
        null=True,
        blank=True,
        default=None,
    )

Then,

obj = MyModel.objects.create(status=MyModel.STATUS.in_progress)
print obj.finished                # None    ---> OK

obj.status = MyModel.STATUS.error
obj.save()
print obj.finished                # `now()`    ---> OK

obj2 = MyModel.objects.create(status=MyModel.STATUS.error)
print obj2.finished                # None    ---> Wrong

I tracked the error to the pre_save method, which is not considering the add argument.
Instead of checking if previous != current: it should be if add or previous != current:

The bug was introduced in this commit when StatusModifiedField was migrated to MonitorField. Notice that the _previous_status method used to check the add argument to force the field to act.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions