-
Notifications
You must be signed in to change notification settings - Fork 89
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
on_commit may fail when not using default db #123
Comments
Now i just add using in MyOnCommitHookedMethod to replace the origin. from django.db import router
## HookMethod
class MyOnCommitHookedMethod(OnCommitHookedMethod):
"""Hooked method that should run on_commit"""
def run(self, instance: Any, using=None) -> None:
# Use partial to create a function closure that binds `self`
# to ensure it's available to execute later.
_on_commit_func = partial(self.method, instance)
_on_commit_func.__name__ = self.name
using = using or router.db_for_write(instance.__class__, instance)
transaction.on_commit(_on_commit_func, using=using) |
Your approach makes sense to me, except for having If we remove it I think it could work for everyone class OnCommitHookedMethod(AbstractHookedMethod):
""" Hooked method that should run on_commit """
@property
def name(self) -> str:
# Append `_on_commit` to the existing method name to allow for firing
# the same hook within the atomic transaction and on_commit
return f"{self.method.__name__}_on_commit"
def run(self, instance: Any) -> None:
# Use partial to create a function closure that binds `self`
# to ensure it's available to execute later.
_on_commit_func = partial(self.method, instance)
_on_commit_func.__name__ = self.name
transaction.on_commit(_on_commit_func, using=router.db_for_write(instance.__class__, instance)) |
Thanks for your comment. For some historical reasons, I have overwritten some methods inherited from LifecycleModel in my base Model class. In normal case, adding |
Problems
In my project, i have some serveral databases. so, my settings.py looks like below.
When i set
on_commit=True
and operated with some objects of sales, it failed.And i find we call
transaction.on_commit
The text was updated successfully, but these errors were encountered: