我正在创建一个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)