Django-在脚本中更改模型字段并迁移

时间:2019-04-24 08:48:13

标签: python django

我正在创建一个Django项目,其中有一个自动生成随机ID的字段。我想从max_length = 1开始,并在没有更多唯一ID的情况下增加它。例如:我将string.ascii_letters + string.digits + ["$-_+"]用作随机ID。使用max_length = 1时,剩下66个唯一ID。创建66.对象后,应将max_length更新为2,并迁移我的数据库。现在我还有66^2 - 66个ID。

这是我尝试过的:

class RandomIDMixin(models.Model):
    id = models.CharField(max_length=settings.DATABASE_ID_MAX_LENGTH, editable=False, primary_key=True, verbose_name="ID", unique=True, default=None)

    class Meta:
        abstract = True

@receiver(pre_save)
def pre_saver(sender, instance, **kwargs):
    if issubclass(sender, RandomIDMixin):
        choices = random.choices(string.ascii_letters + string.digits + ["$-_+"])
        max_length = instance._meta.get_field('id').max_length

        if instance.id is None or instance.id is "":
            while sender.objects.filter(id=instance.id).exists() or instance.id is None or instance.id is "":
                instance.id = "".join(choices, k=max_length)

0 个答案:

没有答案