我想知道是否可以执行以下操作
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
实例时将其保存到数据库中。这可能吗,或者我只是以错误的方式来做?
最佳答案
我认为您最好的方法是在创建模型实例时使用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实例,并将其分配给该实例。