Добрый день!
Есть модель, реализующая профиль пользователя. Она уже заполнена данными разных пользователей, что-то вроде справочника телефонов. Эта модель связана с User с помощью one-to-one. Т.е. каждый пользователь может иметь запись в справочнике. Привожу часть модели.
class Person(models.Model):
user = models.OneToOneField(User, verbose_name='Пользователь', related_name='profile', blank=True, null=True, unique=True)
last_name = models.CharField(max_length=30, verbose_name='Фамилия')
first_name = models.CharField(max_length=30, verbose_name='Имя')
middle_name = models.CharField(max_length=30, verbose_name='Отчество')
birthday = models.DateField(verbose_name='Дата рождения', blank=True, default='00.00.0000')
email = models.EmailField(verbose_name='Email', blank=True)
photo = models.ImageField(upload_to=get_person_image_path, verbose_name='Фотография', blank=True, default=None)
Появилась необходимость авторизовывать новых юзеров спомощью google apps for business, для это решил использовать django-allauth и немного поменянный адаптер для проверки имени домена в почте.
class MySocialAccountAdapter(DefaultSocialAccountAdapter):
def pre_social_login(self, request, sociallogin):
email_domain = sociallogin.user.email.split('@')[1].lower()
if not email_domain == 'domain.tld':
raise ImmediateHttpResponse(HttpResponseRedirect('/forbidden/'))
else:
pass
Теперь сам вопрос, каким образом лучше сделать так что при авторизации нового пользователя, в модели Person искалась запись сравнение по email или last_name and first_name и в случае если она найдена, то заполнялось поле user по залогиневшемуся пользователю.
Что для этого лучше использовать повесить сигнал на метод в модели или написать новый метод в адаптере?