I have two tables:
class Advertisement(models.Model): created_at = models.DateTimeField(auto_now_add=True) author_email = models.EmailField() class Verification(models.Model): advertisement = models.ForeignKeyField(Advertisement) key = models.CharField(max_length=32)
And I need to auto populate Verification table after adding new advertisement.
def gen_key(sender, instance, created, **kwargs): if created: from hashlib import md5 vkey = md5("%s%s" % (instance.author_email, instance.created_at)) ver = Verification(advertisement=instance) ver.key = vkey ver.save() post_save.connect(gen_key, sender=Advertisement)
Of course it doesn't work. Django 1.2 Q: How should I do it?
Ok, halfly solved.
The problem is that post_save() for parent model doesn't calling for childs models.
So you can solve it by providing child class directly.
class Advertisement(models.Model): created_at = models.DateTimeField(auto_now_add=True) author_email = models.EmailField() class Sale(Advertisement): rooms = models.IntegerField(max_length=1) subway = models.ForeignKey(Subway) class Verification(models.Model): advertisement = models.ForeignKeyField(Advertisement) key = models.CharField(max_length=32) def gen_key(sender, instance, created, **kwargs): code goes here post_save.connect(gen_key, sender=Sale, dispatch_uid="my_unique_identifier")
So next question is "How can I use parent class for post_save()?"