python - 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()
解决方案
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()
推荐阅读
- reactjs - 在 redux 中更新状态
- c# - 如何使用数据集获取返回值形式的存储过程
- javascript - 如何从 VueJs 中的不同字段上传多个图像?
- python - 乌班图;Python3 - Textract 安装 - Ebooklib 和 pocketsphinx 的编解码器错误
- python - 安装 pyrcc4 时有什么指导吗?
- scala - Twitter 未来与猫箭
- python - 重新定义子类的 __init__ 以采用不同的参数
- c# - 迭代进行 BFS 或 DFS 遍历时,如何获取有关当前访问级别的信息?
- file - 如何在 Delphi 中追加到文本文件?
- python - 在 numpy 数组中运行 max-min 的窗口。