How to update relation field in override save

45 Views Asked by At

How to update relation OneToOneField field in override save

update working in object.create() but not working in .save()

    def save(self, *args, **kwargs):
        self.wallet.wallet_inventory = 50
        self.wallet.save()
        super(MonthlyBuyerOrder, self).save(*args, **kwargs)

models.py

class OrdersGift(models.Model):
    minPrice = models.IntegerField(null=False, blank=False, default=0)
    giftPrice = models.IntegerField(null=False, blank=False, default=0)
    gift_description = models.TextField(null=True, max_length=250)

    class Meta:
        ordering = ['minPrice']


class BuyerUserWallet(models.Model):
    buyer = models.OneToOneField(User, on_delete=models.CASCADE, null=False)
    joined = models.DateField(auto_now_add=True, blank=False, null=False)
    success_order = models.BigIntegerField(blank=False, null=False, default=0)
    unSuccess_order = models.BigIntegerField(blank=False, null=False, default=0)
    total_order = models.BigIntegerField(blank=False, null=False, default=0)
    wallet_inventory = models.IntegerField(blank=False, null=False, default=0)
    use_gift_order = models.ManyToManyField(BuyerOrders)


class MonthlyBuyerOrder(models.Model):
    wallet = models.ForeignKey(BuyerUserWallet, blank=False, null=False, on_delete=models.CASCADE)
    start_time = models.DateField(auto_now_add=True, blank=False, null=False)
    monthly_order_total = models.BigIntegerField(blank=False, null=False, default=0)
    success_orders = models.ManyToManyField(BuyerOrders)
    gift = models.ForeignKey(OrdersGift, null=True, blank=True, on_delete=models.SET_NULL)
    giftPrice = models.IntegerField(null=False, blank=False, default=0)

    def save(self, force_insert=False,
             force_update=False, using=None, update_fields=None):
        self.wallet.wallet_inventory = 120
        self.wallet.save()
        super(MonthlyBuyerOrder, self).save(force_insert=False,
                                            force_update=False, using=None, update_fields=None)


custom save function also does not work

1

There are 1 best solutions below

3
On

It should work by both method save_base or save. In the original question, you were defining save_base and overriding that from super().save(*args, **kwargs)

def save_base(self, raw=False, force_insert=False,
              force_update=False, using=None, update_fields=None):
    self.wallet.wallet_inventory = 50
    self.wallet.save()
    super(MonthlyBuyerOrder, self).save_base(raw=False, force_insert=False,
              force_update=False, using=None, update_fields=None)