【问题标题】:Django - How to add a custom ID column to identify my objects?Django - 如何添加自定义 ID 列来识别我的对象?
【发布时间】:2016-08-01 12:20:26
【问题描述】:

(首先对不起我的英语不好,希望你能理解我)

好吧,我必须为我的一个模型的对象添加一个自定义 ID,如果相关对象具有一个或其他属性,则此自定义 ID 将具有字母 P 或 L。 具体来说,如果员工具有“Planta Permantente”或“Planta Contratada”属性,则自定义 ID 将以 P 开头,如果您具有“Locacion de servicio”属性,则将以 L 开头。但两者都需要具有相关编号。如果我有 P1,当我为“locacion de servicio”的员工添加新证书时,自定义 ID 必须是“L1”,下一个是 P“P2”

我该怎么做??

这是我的员工模型的一部分

CONTRACT_TYPES = (
    (1, ("Planta Permanente")),
    (2, ("Planta Contratada")),
    (3, ("Locación de servicio")),
)

class Employee(models.Model):

    cuil = models.CharField(
            unique=True,
            max_length=11,
            verbose_name=_('CUIL'),
        )
    name = models.CharField(
            max_length=50,
            verbose_name=_('first name'),
        )
    middle_name = models.CharField(
            blank=True,
            max_length=50,
            verbose_name=_('middle name'),
        )
    last_name = models.CharField(
            max_length=100,
            verbose_name=_('last name'),
        )
    have_children = models.BooleanField(
            default=False)
    contract = models.IntegerField(
            choices=CONTRACT_TYPES,
            verbose_name=_('contract'),
        )

这是我的证书模型的一部分

class Certificate(models.Model):
    employee = models.ForeignKey(
            Employee,
            verbose_name=_('employee'),
        )
    place = models.IntegerField(
            choices=ACCIDENT_PLACE,
            default=1,
            verbose_name=_('place')
        )
    detail = models.CharField(
            max_length=255,
            verbose_name=_('detail'),
        )
    clinic = models.ForeignKey(
            Clinic,
            verbose_name=_('clinic'),
        )

这就是我需要做的,如果员工的合同类型 1 或 2 标识为 P1 P2 P3...P100...Pn 并且如果是 3 相同但带有 L​​ 字母。

有什么想法吗?

(非常感谢)

【问题讨论】:

  • 您希望将此字段添加到哪个型号?数字部分是否连续(以 1 递增)

标签: django django-models


【解决方案1】:

您是否阅读过文档中的这种方法:https://docs.djangoproject.com/en/1.9/ref/models/instances/#explicitly-specifying-auto-primary-key-values

如果您手动指定您的自定义 ID(一个简单的“如果”就可以?)将 P1、L1 或 P2 放在前面并按照上面的 django 文档链接所示保存,这会有帮助吗?为了确保数字是连续的(我假设您想要类似:L101、P102、P103、P204 等?)您可以将您的自定义 ID 与自动主键结合起来,对吧?

因此,最终您的模型将拥有自动生成的 ID 以及您的自定义 ID,其中前两个字母由您指定,以下数字是自动生成的主键的副本。

希望有帮助!

【讨论】:

  • 我会读到,当我回家时,id 必须是连续的,但对于每个字母,我也会有 L101 L102 L103 和 P101 P102 P103。感谢您的回答
猜你喜欢
  • 2017-03-31
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
  • 2021-03-26
  • 1970-01-01
  • 2020-05-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多