我正在使用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)
非常感谢任何帮助!
答案 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_add
和auto_now
使用created_date
和modified_date
,这样就无需在save方法中自行设置它们。