from django.db import models from django.contrib.auth.models import AbstractUser, UserManager from django.contrib.postgres import fields as pgfields from django.utils.translation import gettext_lazy as _ from json import dumps from api.v1 import serializers class User(AbstractUser): USER_ROLE = 0 AUTHOR_ROLE = 1 ADMIN_ROLE = 2 ROLE_CHOICES = ( (USER_ROLE, 'пользователь'), (AUTHOR_ROLE, 'автор'), (ADMIN_ROLE, 'администратор'), ) NOT_DEFINED = 'n' MALE = 'm' FEMALE = 'f' GENDER_CHOICES = ( (NOT_DEFINED, 'не указан'), (MALE, 'Мужчина'), (FEMALE, 'Женщина'), ) email = models.EmailField(_('email address'), unique=True) role = models.PositiveSmallIntegerField('Роль', default=0, choices=ROLE_CHOICES) gender = models.CharField('Пол', max_length=1, default='n', choices=GENDER_CHOICES) birthday = models.DateField('День рождения', null=True, blank=True) country = models.CharField('Страна', max_length=50, null=True, blank=True) city = models.CharField('Город', max_length=85, null=True, blank=True) about = models.CharField('О себе', max_length=1000, null=True, blank=True) instagram = models.URLField(default='', null=True, blank=True) facebook = models.URLField(default='', null=True, blank=True) twitter = models.URLField(default='', null=True, blank=True) pinterest = models.URLField(default='', null=True, blank=True) youtube = models.URLField(default='', null=True, blank=True) vkontakte = models.URLField('ВКонтакте', default='', null=True, blank=True) fb_id = models.BigIntegerField(null=True, blank=True, unique=True) fb_data = pgfields.JSONField(default={}, null=True, blank=True) is_email_proved = models.BooleanField('Верифицирован по email', default=False) photo = models.ImageField('Фото', null=True, blank=True, upload_to='users') USERNAME_FIELD = 'email' REQUIRED_FIELDS = ['username'] class Meta(AbstractUser.Meta): ordering = ('-date_joined',) def serialized(self): user_data = serializers.user.UserSerializer(instance=self).data user_data = dumps(user_data, ensure_ascii=False) return user_data