Как пройти kwargs из сохранить, чтобы после сохранения сигнала
Я подключаю пользовательский сигнал post_save и заметил, что не могу найти простой способ передать набор kwargs.
Во время самого сохранения (внутри пользовательской формы)
def save(self, commit=True):
user = super(CustomFormThing, self).save(commit=False)
#set some other attrs on user here ...
if commit:
user.save()
return user
Тогда внутри моего пользовательского крючка post_save у меня есть следующее (но никогда не получаю никаких kwargs)
@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...
Как я могу передать kwargs из сохранения в событие post_save?
2 ответа:
Встроенные сигналы посылаются Django, поэтому вы не можете управлять их кваргами.
Вы можете:
Определите и пошлите свои собственные сигналы.
Храните дополнительную информацию в экземпляре модели. Вот так
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...
Я не думаю, что есть способ передать отдельный набор кваргов. Какие args вы хотите в дополнение к атрибутам
User
? Вы можете получить доступ к атрибутамUser
в обработчике сигнала по аргументуinstance
.instance
будет объектUser
, который только что был сохранен.Если есть другие вещи, которые вы хотите передать, я полагаю, вы можете попробовать использовать
instance
arg в качестве почтового голубя:def save(self, commit=True): user = super(CustomFormThing, self).save(commit=False) user.foo = 'bar' if commit: user.save() ...
Затем в обработчике:
Но вышеизложенное непроверено, и я не уверен, что оно будет даже работать.def create_profile(sender, instance, created, **kwargs): myfoo = instance.foo