Django外键新模型实例用作默认

时间:2016-06-14 23:22:34

标签: python django

我想知道是否有可能做类似以下的事情

class ModelA(models.Model):
    my_field = models.ForeignKey('UniqueKey', to_field='key' default=UniqueKey.create(key=KeyGen()))
    # KeyGen() returns a new random key

本质上,我有许多模型,它们有一个独特的32位数字键作为其中一个字段。我创建了UniqueKey模型来管理所有这些密钥,并确保不会出现重复项。我要做的是创建一个新的UniqueKey实例,并在我创建一个新的ModelA实例时将其保存到数据库中。

这是可能的还是我只是以错误的方式解决这个问题?

1 个答案:

答案 0 :(得分:0)

我认为您最好的方法是在创建模型实例时使用post_save信号。 https://docs.djangoproject.com/en/1.9/ref/signals/#post-save

即。

class ModelA(models.Model):
    my_field = models.ForeignKey('UniqueKey', to_field='key')

def set_default_uniquekey_for_modela(sender, instance, created, raw, using, update_fields):
    if created is True:
        new_unique_key = UniqueKey(key=KeyGen())
        new_unique_key.save()
        instance.my_field = new_unique_key
        instance.save()

post_save.connect(set_default_uniquekey_for_modela, sender=ModelA)

因此,当创建ModelA的实例时,它将执行set_default_uniquekey_for_modela(...)以创建新的UniqueKey实例并将其分配给实例。