What is the best / proper idiom in django for modifying a field during a .save() where you need to o

Posted by MDBGuy on Stack Overflow See other posts from Stack Overflow or by MDBGuy
Published on 2010-04-16T16:15:36Z Indexed on 2010/04/16 16:33 UTC
Read the original article Hit count: 224

Filed under:
|
|
|

Hi,

say I've got:

class LogModel(models.Model):
    message = models.CharField(max_length=512)

class Assignment(models.Model):
    someperson = models.ForeignKey(SomeOtherModel)
    def save(self, *args, **kwargs):
        super(Assignment, self).save()
        old_person = #?????
        LogModel(message="%s is no longer assigned to %s"%(old_person, self).save()
        LogModel(message="%s is now assigned to %s"%(self.someperson, self).save()

My goal is to save to LogModel some messages about who Assignment was assigned to. Notice that I need to know the old, presave value of this field.

I have seen code that suggests, before super().save(), retrieve the instance from the database via primary key and grab the old value from there. This could work, but is a bit messy.

In addition, I plan to eventually split this code out of the .save() method via signals - namely pre_save() and post_save(). Trying to use the above logic (Retrieve from the db in pre_save, make the log entry in post_save) seemingly fails here, as pre_save and post_save are two seperate methods. Perhaps in pre_save I can retrieve the old value and stick it on the model as an attribute?

I was wondering if there was a common idiom for this. Thanks.

© Stack Overflow or respective owner

Related posts about django

Related posts about signals