tbaror
tbaror

Reputation: 35

Update model field when creating from another model instance which is ForeignKey related

I started car fleet app and created a few models in models related file, I did models hierarchy that on top I have the car brand, below ForeignKey related car models to each brand, and ForeignKey for each car id that eventually consists the car inventory, which is called "class CarPool", in this model I have value "car_sale_status = models.BooleanField(default=False)", what I would like to achieve is each time I create an instance from associated ForeignKey of the seller will update automatically "car_sale_status = models.BooleanField(default=False)" to True

Please advice

Thanks

class CarPool(models.Model):

    # Relationship Fields
    car_inventory = models.ForeignKey(
        'cardealer.CarTypes',
        on_delete=models.CASCADE, related_name="carpools", 
    )
    car_id = models.CharField(max_length=30,default="")
    car_location = GeopositionField()
    car_sale_status = models.BooleanField(default=False)


    YEAR_CHOICES = []


    for r in range(1980, (datetime.datetime.now().year+1)):
        YEAR_CHOICES.append((r,r))


    year_manufacture = models.IntegerField(('year_manufacture'), choices=YEAR_CHOICES, default=datetime.datetime.now().year)


    def __str__(self):
        return self.car_id

    def __unicode__(self):
        return self.car_inventory

class CustomerBuyer(models.Model):

    buyer_car_buy = models.ForeignKey(
        'cardealer.CarPool',
        on_delete=models.CASCADE, related_name="customer_buyer",default='0'
    )
    buyer_private_name = models.CharField(max_length=80,default='')
    buyer_family_name = models.CharField(max_length=80,default='')
    buyer_private_id = models.IntegerField(default=0)
    transaction_date = models.DateTimeField(default=datetime.datetime.now())
    transaction_amount = models.IntegerField(default=0)




    def __str__(self):
        return self.buyer_private_name + ' '+ self.buyer_family_name

    def __unicode__(self):
        return self.buyer_private_name + ' '+ self.buyer_family_name

Upvotes: 0

Views: 157

Answers (1)

Vladimir Goncharuk
Vladimir Goncharuk

Reputation: 362

if I understand you correctly, simply expand the 'save' method

class CustomerBuyer(models.Model):

    buyer_car_buy = models.ForeignKey(
        'cardealer.CarPool',
        on_delete=models.CASCADE, related_name="customer_buyer",default='0'
    )
    buyer_private_name = models.CharField(max_length=80,default='')
    buyer_family_name = models.CharField(max_length=80,default='')
    buyer_private_id = models.IntegerField(default=0)
    transaction_date = models.DateTimeField(default=datetime.datetime.now())
    transaction_amount = models.IntegerField(default=0)

    def __str__(self):
        return self.buyer_private_name + ' '+ self.buyer_family_name

    def __unicode__(self):
        return self.buyer_private_name + ' '+ self.buyer_family_name

    def save(self, *arg, **kwargs):
        super(CustomerBuyer, self).save(*args, **kwargs)
        self.buyer_car_buy.car_sale_status = True
        self.buyer_car_buy.save()

Upvotes: 1

Related Questions