Created
July 9, 2016 21:02
-
-
Save linevych/58081d889fb22d1dbdf811fb62c8cd2b to your computer and use it in GitHub Desktop.
Custom User model for Dmytro
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
# В Python 3 кодування писати не має змісту. | |
from django.db import models | |
from django.utils.translation import ugettext_lazy as _ | |
from django.contrib.auth.models import AbstractUser | |
USER = 0 | |
OWNER = 1 | |
SELLER = 2 | |
user_type_choice = ( | |
(USER, 'User'), | |
(OWNER, 'Owner'), | |
(SELLER, 'Seller'), | |
) | |
class User(AbstractUser): | |
""" | |
Custom user model. | |
Трохи підкорегуав твій клас. | |
1. Таке форматування значно краще читається. | |
2. Старайся ставити verbose_name, це значно спростить читання коду. | |
3. Корисутйся translation utils. Це не складно, але якщо тобі доведеться | |
перекладати проект, це зекономить купу часу. | |
4. Додав методи, щоб отримувати роль. | |
Приклад: | |
code-block:: python | |
if request.user.is_owner(): | |
# Do some stuff. | |
Виглядає значно читабельгіше як на мене. | |
Взагалі якщо seller/owner це не тільки ролі, а й профілі з різним набором полів | |
то варто наслідуватись від цієї моделі і створити окремі моделі Owner(User) та Seller(User). | |
Тоді буде простіше вносити зміни і мігрувати кожну окрему модель. | |
В якості AUTH_USER_MODEL для всього буде ця модель. | |
""" | |
role = models.CharField( | |
verbose_name=_('Роль'), | |
max_length=100, | |
choices=user_type_choice, | |
default=USER | |
) | |
idn = models.CharField( | |
verbose_name=_('Ідентифікаційний код'), | |
max_length=10, | |
blank=True, | |
default=None, | |
null=True | |
) | |
mobile = models.CharField( | |
verbose_name=_('Номер мобільного'), | |
max_length=15, | |
blank=True, | |
default=None, | |
null=True | |
) | |
parent = models.ForeignKey( | |
'self', | |
verbose_name=_('Батьківський(?) користувач'), | |
help_text=_('Незрозумів що і для чого це'), | |
null=True, | |
blank=True | |
) | |
tariff = models.IntegerField( | |
verbose_name=_('Тариф'), | |
default=None, | |
null=True, | |
blank=True | |
) | |
def _user_role_is(self, role): | |
""" | |
Check if current user role matches to given. | |
@:param role: user role. | |
@:type role: int. | |
@:rtype bool. | |
@:return True if user matches given role. Else returns false. | |
""" | |
if self.role == role: | |
return True | |
else: | |
return False | |
def is_owner(self): | |
""" | |
Check if user role is owner. | |
""" | |
return self._user_role_is(OWNER) | |
def is_seller(self): | |
""" | |
Check if user role is seller. | |
""" | |
return self._user_role_is(SELLER) | |
class Meta(AbstractUser.Meta): | |
swappable = 'AUTH_USER_MODEL' |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment