如何将当前年份与下一个模型ID组合并将其保存在字段中

时间:2016-01-24 21:07:38

标签: python django model-view-controller

我正在使用Django 1.8.6和Python 2.7.8。我正在尝试使用字段" jobNumber"来保存名为Project的模型,该字段是当前年份加上模型的下一个Id的4个字符串的组合。示例:年份为2016年,模型的下一个Id为1,将其设为4个字符串,为0001,将年份和字符值加在一起,字段值应为" 20160001"。

这是我的模特:

@python_2_unicode_compatible  # only if you need to support Python 2
class Project(models.Model):
    name = models.CharField(max_length=50)
    jobNumber = models.CharField(max_length=8)
    contractor = models.ForeignKey(Contractor, on_delete=models.CASCADE, default=101)
    created_by = models.ForeignKey(User, related_name='Project_created_by')
    created_date = models.DateTimeField()
    modified_by = models.ForeignKey(User, related_name='Project_modified_by')
    modified_date = models.DateTimeField()
    def __str__(self):
        return self.name
    def save(self, *args, **kwargs):
        if not self.id:
            self.created_date = timezone.now()
        self.modified_date = timezone.now()
        super(Project, self).save(*args, **kwargs)

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

在保存之前,您无法获取下一个ID,因为它是由插入时的数据库分配的。所以除了节省两次之外别无选择。

def save(self, *args, **kwargs):
    if not self.id:
        super(Project, self).save(*args, **kwargs)
        year = datetime.datetime.now().year
        self.jobNumber = '{}{:04d}'.format(year, self.id)
    super(Project, self).save(*args, **kwargs)

请注意,您应分别对auto_now_addauto_now使用created_datemodified_date,这样就无需在save方法中自行设置它们。