python - Django 模型 post_save
问题描述
如果系统检测到字段已更新,如何将新数据插入另一个模型?例如我有两个模型FmCustomerEmployeeSupplier和TrCustomerEmployeeSupplierSubmittedRecords,这是模型
//FmCustomerEmployeeSupplier
class FmCustomerEmployeeSupplier(models.Model):
Pending_Request = [
('Active', 'Active'),
('Inactive', 'Inactive'),
]
fmCustomerID = models.ForeignKey('FmCustomer',on_delete=models.SET_NULL, null=True, blank=True, verbose_name="Customer")
email = models.CharField(max_length=500, blank=True, null=True)
bodyTemperature = models.FloatField(null=True, blank=True)
employee_number = models.CharField(max_length=500, blank=True, null=True)
inputdate = models.DateField(auto_now_add=True)
inputBy = models.CharField(max_length=500, blank=True)
modifyDate = models.DateField(auto_now=True, blank=True, null=True)
modifyBy = models.CharField(max_length=500, blank=True)
status = models.CharField(max_length=500, null=True, choices=Pending_Request, blank=True)
def clean_name(self):
return self.cleaned_data["employee_number"].upper()
def save(self, force_insert=False, force_update=False):
self.employee_number = self.employee_number.upper()
super(FmCustomerEmployeeSupplier, self).save(force_insert, force_update)
super(TrCustomerEmployeeSupplierSubmittedRecords, self).save(force_insert, force_update) //I just add this line of code
@property
def is_past_due(self, *args, **kwargs):
return date.today() > self.modifyDate
//TrCustomerEmployeeSupplierSubmittedRecords
class TrCustomerEmployeeSupplierSubmittedRecords(models.Model):
Pending_Request = [
('Active', 'Active'),
('Inactive', 'Inactive'),
]
fmCustomerID = models.ForeignKey('FmCustomer',on_delete=models.SET_NULL, null=True, blank=True, verbose_name="Customer")
email = models.CharField(max_length=500, blank=True, null=True)
bodyTemperature = models.FloatField(null=True, blank=True)
employee_number = models.CharField(max_length=500, blank=True, null=True)
inputdate = models.DateField(auto_now_add=True)
inputBy = models.CharField(max_length=500, blank=True)
modifyDate = models.DateField(auto_now=True, blank=True, null=True)
modifyBy = models.CharField(max_length=500, blank=True)
status = models.CharField(max_length=500, null=True, choices=Pending_Request, blank=True)
故事情节:
用户在FmCustomerEmployeeSupplier中更新了体温,我只想在我的模型中,当系统检测到FmCustomerEmployeeSupplier更新时,我有一个触发器,记录将插入TrCustomerEmployeeSupplierSubmittedRecords。
这是我收到的错误
我希望你们能帮助我解决这个问题。谢谢
解决方案
我已经为你做了这件事。
class FmCustomerEmployeeSupplier(models.Model):
Pending_Request = [
('Active', 'Active'),
('Inactive', 'Inactive'),
]
# fmCustomerID = models.ForeignKey('FmCustomer',on_delete=models.SET_NULL, null=True, blank=True,
# verbose_name="Customer")
email = models.CharField(max_length=500, blank=True, null=True)
bodyTemperature = models.FloatField(null=True, blank=True)
employee_number = models.CharField(max_length=500, blank=True, null=True)
inputdate = models.DateField(auto_now_add=True)
inputBy = models.CharField(max_length=500, blank=True)
modifyDate = models.DateField(auto_now=True, blank=True, null=True)
modifyBy = models.CharField(max_length=500, blank=True)
status = models.CharField(max_length=500, null=True, choices=Pending_Request, blank=True)
class TrCustomerEmployeeSupplierSubmittedRecords(models.Model):
Pending_Request = [
('Active', 'Active'),
('Inactive', 'Inactive'),
]
fmCustomerID = models.OneToOneField(FmCustomerEmployeeSupplier, on_delete=models.CASCADE, null=True, blank=True,
verbose_name="Customer")
email = models.CharField(max_length=500, blank=True, null=True)
bodyTemperature = models.FloatField(null=True, blank=True)
employee_number = models.CharField(max_length=500, blank=True, null=True)
inputdate = models.DateField(auto_now_add=True)
inputBy = models.CharField(max_length=500, blank=True)
modifyDate = models.DateField(auto_now=True, blank=True, null=True)
modifyBy = models.CharField(max_length=500, blank=True)
status = models.CharField(max_length=500, null=True, choices=Pending_Request, blank=True)
def save(self, *args, **kwargs):
print(**kwargs)
if not self.bodyTemperature:
if self._state.adding:
self.bodyTemperature = self.fmCustomerID.bodyTemperature
super(TrCustomerEmployeeSupplierSubmittedRecords, self).save(*args, **kwargs)
@receiver(post_save, sender=FmCustomerEmployeeSupplier)
def record_body(sender, instance, **kwargs):
if not hasattr(instance, 'trcustomeremployeesuppliersubmittedrecords'):
tr_csutomeremployee = TrCustomerEmployeeSupplierSubmittedRecords(bodyTemperature=instance.bodyTemperature)
tr_csutomeremployee.save()
推荐阅读
- python - Improving performance of complex logical conditions on numpy arrays
- python - 正则表达式搜索失败
- html - 由于 h2 在其上方,图像溢出容器
- javascript - 是否可以从 Node.JS/Javascript 调用 C# 函数
- c# - 具有动态孩子的 MVVM 可能吗?
- java - 为什么返回语句不退出方法?
- java - 如何在 webview 中加载内部链接?
- python - 如何导入与其所在文件同名的蓝图?
- python - 从文本文件中检索随机单词
- graphql - 尝试进行更新突变时出现“不正确的填充”错误