首页 > 解决方案 > Django 使用原始数据更新模型

问题描述

我有这个模型,其中 Invoice_number 是在保存时自动生成的。

我的问题:当我更新此模型中的任何字段时,会生成一个新的发票号。

有什么办法可以更新表格并保持原始发票编号不变!

class sale(models.Model):
    name = models.CharField(max_length=30,null=True)
    contact = models.IntegerField(null=True)
    email = models.EmailField(max_length=50,null=True)
    Delivery_Date = models.DateField(null=True)
    Delivery_time = models.CharField(max_length=80,null=True)
    service = models.CharField(max_length=20,null=True)
    Invoice_number = models.CharField(max_length=12,blank=True,unique=True)

    def save(self, *args, **kwargs):
        if self.service == 'Furniture':
            x=randint(99,99999)
            self.Invoice_number = str('Fur') + str(x)
        elif self.service == 'Auto':
            x=randint(99,99999)
            self.Invoice_number = str('Auto') + str(x)
        elif self.service == 'Groceries':
            x=randint(99,99999)
            self.Invoice_number = str('Gro') + str(x)
        super(bookings_modelform,self).save()

标签: pythondjangodjango-modelsdjango-forms

解决方案


save如果对象是新的,您可以签入模型的方法,self.pk仅在这种情况下使用和生成发票编号:

def save(self, *args, **kwargs):
    if self.pk is None:
        if self.service == 'Furniture':
            x=randint(99,99999)
            self.Invoice_number = str('Fur') + str(x)
        elif self.service == 'Auto':
            x=randint(99,99999)
            self.Invoice_number = str('Auto') + str(x)
        elif self.service == 'Groceries':
            x=randint(99,99999)
            self.Invoice_number = str('Gro') + str(x)
    super(bookings_modelform,self).save()

推荐阅读