在django中创建自定义复合主键

时间:2016-03-22 18:33:37

标签: django django-models model

我正计划使用结算软件。现在,对于账单,我需要一个账单号,我也希望成为主键。此法案不必是客户ID和自动递增序列号

的组合

例如,如果客户ID是" ABC",那么我希望账单pk是ABC1,ABC2等等....

如何做到这一点是django。现在我正在使用sqlite,但是我计划在部署期间使用MySQL。

谢谢。

1 个答案:

答案 0 :(得分:2)

自定义保存方法,并生成主键

def sku(last_sku):
    sku = last_sku[:4]
    sku += str(int(last_sku[4:]) + 1).zfill(4)
    return sku;

class YourModel(models.Model):
    sku = models.CharField(max_length=8,primary_key==True)
    customer = models.ForeignKey(Customer)
    ...

    def save(self, *args, **kwargs):
        if not self.sku:
            customer_id = self.customer.id
            try:
                last = YourModel.objects.filter(customer_id = customer_id).latest('sku')
                self.sku = sku(last.sku)
            except YourModel.DoesNotExist:
                self.sku = self.customer_id+"0001"
        super(YourModel,self).save(*args,**kwargs)