[英]Django model post_save
How do I insert new data to another models if the system detects the field is updated?如果系统检测到字段已更新,如何将新数据插入另一个模型? for example i have two models FmCustomerEmployeeSupplier and TrCustomerEmployeeSupplierSubmittedRecords , this is the model例如我有两个模型FmCustomerEmployeeSupplier和TrCustomerEmployeeSupplierSubmittedRecords ,这是 model
//FmCustomerEmployeeSupplier //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 //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)
Storyline:故事情节:
the user updated the body temperature in FmCustomerEmployeeSupplier , i just want that in my models, i have a trigger when the system detect that the FmCustomerEmployeeSupplier updated, the record will insert in TrCustomerEmployeeSupplierSubmittedRecords .用户在FmCustomerEmployeeSupplier更新了体温,我只想在我的模型中,当系统检测到FmCustomerEmployeeSupplier更新时,我有一个触发器,记录将插入TrCustomerEmployeeSupplierSubmittedRecords 。
this is the error i received这是我收到的错误
I hope you guys will help me with this problem.我希望你们能帮助我解决这个问题。 thanks谢谢
I have done upto this for you.我已经为你做到了。
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()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.