从函数和前缀字符串中创建Django中的默认ID

Pro*_*eus 5 python django django-models

我需要做的是运行一个函数并在该函数返回的结果的开头附加一个前缀.每次为我的模型创建新实例时都需要执行此操作.

我试过的......

以下操作无效,因为您无法将字符串添加到函数中,并将ID设置为s_<function name etc>而不是函数的结果.

APP_PREFIX = "_s"
id = models.CharField(primary_key=True, max_length=50, unique=True,
                      default="{}{}".format(APP_PREFIX, make_id))
Run Code Online (Sandbox Code Playgroud)

也不会将前缀传递给函数,因为Django每次以这种方式调用函数时都会生成相同的键,不知道为什么:

id = models.CharField(primary_key=True, max_length=50, unique=True,
                      default=make_id(APP_PREFIX))
Run Code Online (Sandbox Code Playgroud)

这也不起作用:

id = models.CharField(primary_key=True, max_length=50, unique=True,
                      default=make_id + APP_PREFIX)
Run Code Online (Sandbox Code Playgroud)

或这个:

id = models.CharField(primary_key=True, max_length=50, unique=True,
                      default=make_id() + APP_PREFIX)
Run Code Online (Sandbox Code Playgroud)

怎么能实现这一目标?

我可以覆盖该save()方法并实现此目的,但必须有一种方法可以使用字段上的默认参数执行此操作!

Pro*_*eus 3

我找到了一种在我的模型上实现这一目标的方法:

PREFIX = settings.PREFIXES['THIS']
def get_id():
  return make_id(PREFIX)

    class MyModel(models.Model):
        id = models.CharField(primary_key=True,unique=True,
                                  default=get_id,)
Run Code Online (Sandbox Code Playgroud)