我想知道是否有可能做类似以下的事情
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
实例时将其保存到数据库中。
这是可能的还是我只是以错误的方式解决这个问题?
答案 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实例并将其分配给实例。