4

私は2つのテーブルを持っています:

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)

また、新しい広告を追加した後、検証テーブルに自動入力する必要があります。

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)

もちろん、うまくいきません。Django 1.2 Q: どうすればいいですか?


わかりました、半分解決しました。
問題は、親モデルの post_save() が子モデルを呼び出さないことです。
したがって、子クラスを直接提供することで解決できます。

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")

次の質問は、「post_save() に親クラスを使用するにはどうすればよいですか?」ということです。

4

1 に答える 1

5

特定の送信者に接続する代わりに、一般的に post_save に接続し、ハンドラーで保存されたインスタンスのクラスを確認します。

def gen_key(sender, **kwargs):
    if issubclass(sender, Advertisement):
        code goes here
post_save.connect(gen_key, dispatch_uid="my_unique_identifier")
于 2011-08-26T09:32:04.133 に答える