Files
account_store/AuthApp/models.py
2024-02-01 17:46:44 +03:00

113 lines
3.9 KiB
Python

# coding=utf-8
from __future__ import unicode_literals
import json
from django.contrib.auth.models import User
from django.db import models
from django.utils.translation import gettext_lazy as _
from django.db.models.signals import post_save, pre_save
from django.contrib.contenttypes.fields import GenericRelation
from django.contrib.postgres.fields import JSONField
from BaseModels.base_models import BaseModel
from datetime import datetime
def user_name_str(self):
return f'{self.last_name} {self.first_name}'
User.add_to_class("__str__", user_name_str)
account_type_choices = (
('mover', _('Перевозчик')),
('sender', _('Отправитель'))
)
class UserProfile(BaseModel):
account_type = models.CharField(
max_length=250, verbose_name=_('Тип учетной записи'), choices=account_type_choices, default='sender')
user = models.OneToOneField(User, verbose_name=_('Пользователь'), related_name=u'user_profile',
null=True, blank=True, on_delete=models.CASCADE)
avatar = models.ImageField(upload_to='uploads/', verbose_name=_('Аватар'), null=True, blank=True)
authMailCode = models.CharField(max_length=32, null=True, blank=True)
phone = models.CharField(max_length=100, verbose_name=_('Телефон'), null=True, blank=True)
country = models.CharField(max_length=250, verbose_name=_('Страна'), null=True, blank=True)
city = models.CharField(max_length=250, verbose_name=_('Город'), null=True, blank=True)
birthdate = models.DateField(verbose_name=_('Дата рождения'), null=True, blank=True)
comment = models.TextField(verbose_name=_('Дополнительные сведения'), null=True, blank=True)
creator = models.ForeignKey(
User, verbose_name=_('Создатель'), related_name='rel_users_for_creator', null=True, blank=True,
on_delete=models.SET_NULL
)
mailing_on = models.BooleanField(default=False, verbose_name=_('Рассылка'))
def save_user_alerts_to_session(self, request):
for_save_to_session = self.get_node_by_name('for_save_to_session')
if for_save_to_session:
for key, val in for_save_to_session.items():
request.session[key] = val
return request
def __str__(self):
if self.user:
return '{0} {1}'.format(self.user.last_name, self.user.first_name)
else:
return str(self.id)
class Meta:
verbose_name = _(u'Профиль')
verbose_name_plural = _(u'Профили')
ordering = ('user__last_name', 'user__first_name')
def create_user_profile(sender, instance, created, **kwargs):
user_profile = None
if created:
user_profile = UserProfile.objects.create(user=instance)
# if user_profile and not user_profile.avatar:
# from allauth.socialaccount.models import SocialAccount
# # try:
# social_accounts = SocialAccount.objects.filter(user=instance)
# if social_accounts:
# for social_account in social_accounts:
# if 'picture' in social_account.account.extra_data and social_account.account.extra_data['picture']:
# with open(social_account.account.extra_data['picture'], 'rb') as fd:
# user_profile.avatar.save(f'avatar_{instance.id}.jpeg', fd.read(), True)
#
# # except Exception as e:
# # msg = f'post_save create_user_profile Error = {str(e)}'
# # print(msg)
post_save.connect(create_user_profile, sender=User, dispatch_uid='post_save_connect')
def preSaveUser(sender, instance, **kwargs):
if not instance.email:
instance.email = str(instance.username).lower()
try:
instance.user_profile.modifiedDT = datetime.now()
except:
pass
pre_save.connect(preSaveUser, sender=User, dispatch_uid='pre_save_connect')