I have model:
class UserAvailableCredit(models.Model):
user = models.ForeignKey(
"auth_ex.User",
related_name="credits",
on_delete=models.CASCADE,
)
payment = models.ForeignKey(
Payment,
related_name="credits",
on_delete=models.CASCADE,
)
project = models.ForeignKey(
Project,
related_name="credits",
on_delete=models.CASCADE,
null=True,
blank=True,
)
and on this model I make various actions like:
- Bulk creating
- Deleting
- Updating etc.
is there any way to have one method that on any change of model triggers action?
- Overwriting save method doesn't solve problem when bulk_create action is triggered.
In my solution I have done something like this:
class UserAvailableCreditQuerySet(QuerySet):
def update(self, **kwargs):
notify = kwargs.pop("notify", False)
if notify:
#custom action
def bulk_create(self, objs, batch_size=None):
super().bulk_create(objs, batch_size)
#custom action
class UserAvailableCredit(models.Model):
"""Model to store available users credits to use with plan limitations."""
objects = UserAvailableCreditQuerySet.as_manager()
user = models.ForeignKey(
"auth_ex.User",
related_name="credits",
on_delete=models.CASCADE,
)
payment = models.ForeignKey(
Payment,
related_name="credits",
on_delete=models.CASCADE,
)
project = models.ForeignKey(
Project,
related_name="credits",
on_delete=models.CASCADE,
null=True,
blank=True,
)
class Meta:
ordering = ["id"]
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
#custom action
def create(self, *args, **kwargs):
super().create(*args, **kwargs)
#custom action
def delete(self, *args, **kwargs):
super().delete(*args, **kwargs)
#custom action
But I am not sure if it is best way to solve this problem.