【问题标题】:can I concatenate some text with auto increment id (primary key)?我可以将一些文本与自动增量 ID(主键)连接起来吗?
【发布时间】:2013-07-18 16:38:08
【问题描述】:

这里我有一个名为 "Something" 的模型,它有主键列 id,会自动生成 id。

class Something:
    id = models.AutoField(primary_key=true)

这将生成像 1,2,3

这样的整数

但是,我想要像 "someConst1","someConst2","someConst3" 这样的东西,这里 someConst 是永远不会改变的常数值。

有什么方法可以将一些文本与自动生成的 id 连接起来?

【问题讨论】:

  • 你为什么要做这样的事情?相反,在访问时您可以显式访问它为 "someConst%s" % id ?

标签: django django-models django-forms django-templates django-views


【解决方案1】:

默认情况下,django 为每个模型添加一个id = models.AutoField(primary_key=True)

您可以创建自己的 id 并将其设置为 primary_key = True

参考:https://docs.djangoproject.com/en/dev/topics/db/models/#automatic-primary-key-fields

一种方法是像这样覆盖保存方法:

class Xpto(models.Model):
    id = models.CharField(max_length=200, primary_key = True)
    autonum = models.IntegerField()
    def save(self, *args, **kwargs):
        last_autonum = Xpto.objects.all().order_by("-autonum")
        #Use this if just to add the first record, then use just last_autonum=last_autonum[0].autonum
        if last_autonum.count():
            last_autonum=last_autonum[0].autonum
        else:
            last_autonum = 0
        self.id = 'someConst%d' % (last_autonum + 1)
        self.autonum = last_autonum + 1
        super(Xpto,self).save(*args,**kwargs)

请记住,在您第一次运行时,它会引发异常,因为您在此表中没有任何记录。你可以这样添加。

【讨论】:

  • 它说autofields必须有primary_key=True,这意味着autonum应该是一个主键..
  • 我想要一些自动生成的字符字段,这就是为什么。
  • 我添加了一些改进,没有 AutoField。
  • 我认为这会在每次更新对象时增加,应该只用于创建?
猜你喜欢
  • 1970-01-01
  • 2020-08-18
  • 1970-01-01
  • 1970-01-01
  • 2017-08-16
  • 1970-01-01
  • 1970-01-01
  • 2021-06-10
  • 2022-06-14
相关资源
最近更新 更多