Django - 如何添加自定义ID列以标识我的对象?

时间:2016-08-01 12:20:27

标签: django django-models

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

我必须在我的某个模型的对象中添加自定义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 个答案:

答案 0 :(得分:0)

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

如果你手动指定自定义ID(一个简单的'if'会怎么做?)将P1,L1或P2放在前面并保存,如上面的django docs链接所示,这会有帮助吗?为了确保数字是连续的(我假设你想要像L101,P102,P103,P204等?)你可以将你的自定义ID与自动主键组合,对吗?

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

希望有所帮助!