Сигналы в Джанго. Пожалуйста, сломайте код - PullRequest
0 голосов
/ 18 октября 2019

@ получатель (post_save, отправитель = пользователь) def create_profile (отправитель, экземпляр, создан, ** kwargs): если создан: Profile.objects.create (пользователь = экземпляр)

@ получатель (post_save,отправитель = пользователь) def create_profile (отправитель, экземпляр, ** kwargs): instance.profile.save ()

Может кто-нибудь, пожалуйста, объясните код простыми словами. Я понимаю, что post_save - это сигнал, который отправляет пользователь, а create_profile получает сигнал. и если пользователь создан, он сохраняет профиль. но может кто-нибудь сломать код, чтобы я понял и использовал его в другом месте, а не просто копировал, вставлял его. и что такое экземпляр и почему мы его используем?

1 Ответ

0 голосов
/ 18 октября 2019

Здесь я пытаюсь разбить этот блок кода.

следующая строка - это декоратор, который соединяет модель User с post_save методом create_profile. поэтому теперь этот метод готов к запуску после любых изменений User модели.

@receiver(post_save, sender=User)

после любых изменений, сделанных в User, будет вызван следующий метод, который получит некоторые значения аргумента как [sender=User, instance=created or modified user object, created=True if newly created or False if updated, kwargs=other values]

def create_profile(sender,instance,created,**kwargs):

if created, что означает, что экземпляр создается впервые, поэтому Profile.objects.create(user=instance) этот блок будет успешно работать и создаст новый профиль.

if created:
    Profile.objects.create(user=instance)

Окончательный блок кода будетбыть как:

@receiver(post_save, sender=User)
def create_profile(sender,instance,created,**kwargs):
    if created:
        Profile.objects.create(user=instance)

спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...