user14823468
user14823468

Reputation: 111

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

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)

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.

this is the error i received

enter image description here

I hope you guys will help me with this problem. thanks

enter image description here

Upvotes: 0

Views: 88

Answers (1)

lord stock
lord stock

Reputation: 1201

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()

Upvotes: 1

Related Questions