45
Built-in signals are sent by Django, so you can’t control their kwargs.
You can:
- Define and send your own signals.
-
Store additional info in model instance. Like this
def save(self, commit=True): user = super(CustomFormThing, self).save(commit=False) #set some other attrs on user here ... user._some = 'some' user._other = 'other' if commit: user.save() return user @receiver(post_save, sender=User) def create_profile(sender, instance, created, **kwargs): some_id = getattr(instance, '_some', None) other_id = getattr(instance, '_other', None) if created: #do something with the kwargs above...
2
I don’t think there’s a way to pass a separate set of kwargs. What args do you want in addition to the User
attributes? You can access the User
attributes in the signal handler on the instance
argument. instance
will be the User
object that just got saved.
If there are other things you want to pass along, I suppose you could try to use the instance
arg as a carrier pigeon:
def save(self, commit=True):
user = super(CustomFormThing, self).save(commit=False)
user.foo = 'bar'
if commit:
user.save()
...
Then in the handler:
def create_profile(sender, instance, created, **kwargs):
myfoo = instance.foo
But the above is untested, and I’m not sure it will even work.
- [Django]-Django, Turbo Gears, Web2Py, which is better for what?
- [Django]-Django: implementing JOIN using Django ORM?
- [Django]-In Django, how do I select 100 random records from the database?
1
We can pass additional arguments as below:
def save(self, commit=True):
user = super(CustomFormThing, self).save(commit=False)
#set some other attrs on user here ...
if commit:
user.save(signal_kwargs={'_some': 'some', '_other': 'other'})
return user
And you can get it from the post save method like:
@receiver(post_save, sender=User)
def create_profile(sender, instance, created, **kwargs):
some_id = kwargs.get('some', None)
other_id = kwargs.get('other', None)
if created:
#do something with the kwargs above...
- [Django]-Add Text on Image using PIL
- [Django]-Annotate with latest related object in Django
- [Django]-How to mock users and requests in django
Source:stackexchange.com