我想知道是否可以执行以下操作

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实例,并将其分配给该实例。

10-05 19:38