Created
July 29, 2020 17:01
-
-
Save fandrefh/ff6d8bbe047654174aa699072589539a to your computer and use it in GitHub Desktop.
This file contains hidden or 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
# models.py | |
class User(AbstractBaseUser, PermissionsMixin): | |
username_validator = UnicodeUsernameValidator() | |
id = models.UUIDField(verbose_name=_('ID'), primary_key=True, default=uuid.uuid4, editable=False) | |
username = models.CharField( | |
_('Usuário'), | |
max_length=150, | |
unique=True, | |
help_text=_('Obrigatório. 150 caracteres ou menos. Letras, números e os símbolos @/./+/-/_ são permitidos.'), | |
validators=[username_validator], | |
error_messages={ | |
'unique': _("Já existe um usuário com este username."), | |
}, | |
blank=True, null=True | |
) | |
full_name = models.CharField(verbose_name=_('Nome'), max_length=150) | |
address = models.CharField(verbose_name=_('Endereço'), max_length=200, blank=True, default='') | |
area = models.CharField(verbose_name=_('Bairro'), max_length=50, blank=True, default='') | |
state = models.CharField(verbose_name=_('Estado'), max_length=2, choices=STATE_CHOICES, blank=True, default='') | |
city = models.CharField(verbose_name=_('Cidade'), max_length=50, blank=True, default='') | |
zip_code = models.CharField(verbose_name=_('CEP'), max_length=10, blank=True, default='') | |
complement = models.CharField(verbose_name=_('Complemento'), max_length=100, blank=True, default='') | |
cell_phone = models.CharField(verbose_name=_('Celular'), max_length=14, blank=True, default='') | |
cpf = models.CharField(verbose_name=_('CPF'), max_length=14, blank=True, null=True, unique=True) | |
rg = models.CharField(verbose_name=_('RG'), max_length=50, blank=True, null=True, unique=True) | |
birthday = models.DateField(verbose_name=_('Nascimento'), blank=True, null=True) | |
email = models.EmailField(verbose_name=_('E-mail'), unique=True) | |
photo = models.ImageField(verbose_name=_('Foto'), upload_to='photos', blank=True, default='') | |
is_staff = models.BooleanField(verbose_name=_('Staff'), default=False, help_text=_('Pode logar no Admin')) | |
is_active = models.BooleanField( | |
verbose_name=_("Ativo"), | |
default=True, | |
help_text=_('Desmarque esta opção em vez de deletar o usuário') | |
) | |
date_joined = models.DateTimeField(verbose_name=_('Data de cadastro'), default=timezone.now, editable=False) | |
objects = UserManager() | |
EMAIL_FIELD = 'email' | |
USERNAME_FIELD = 'email' | |
REQUIRED_FIELDS = ['full_name'] | |
class Meta: | |
verbose_name = _('Usuário') | |
verbose_name_plural = _('Usuários') | |
permissions = [ | |
('jn_can_access_courses', _('Pode acessar os cursos')), | |
('jn_can_access_articles', _('Pode acessar os artigos')), | |
('jn_can_access_coaches', _('Pode contratar os Coaches')), | |
] | |
swappable = "AUTH_USER_MODEL" | |
def get_username(self): | |
return self.username | |
def get_full_name(self): | |
return self.full_name | |
def get_short_name(self): | |
short_name = self.full_name.split()[0] + ' ' + self.full_name.split()[-1] | |
return short_name.strip() | |
def email_user(self, subject, message, from_email=None, **kwargs): | |
send_mail(subject, message, from_email, [self.email], **kwargs) | |
@property | |
def pk(self): | |
return self.id.urn[9:] | |
# managers.py | |
class UserManager(BaseUserManager): | |
use_in_migrations = True | |
def _create_user(self, username, email, password, **extra_fields): | |
""" | |
Creates and saves a User with the given email and password. | |
""" | |
if not email: | |
raise ValueError(_('O e-mail é obrigatório')) | |
if username is None: | |
username = get_unique_username(email) | |
email = self.normalize_email(email) | |
user = self.model(username=username, email=email, **extra_fields) | |
user.set_password(password) | |
user.save(using=self._db) | |
return user | |
def create_user(self, email, password=None, username=None, **extra_fields): | |
extra_fields.setdefault('is_superuser', False) | |
return self._create_user(username=username, email=email, password=password, **extra_fields) | |
def create_superuser(self, email, password, username=None, **extra_fields): | |
extra_fields.setdefault('is_superuser', True) | |
extra_fields.setdefault('is_staff', True) | |
extra_fields.setdefault('is_active', True) | |
if extra_fields.get('is_superuser') is not True: | |
raise ValueError(_('Super usuário precisa ter is_superuser=True')) | |
return self._create_user(username=username, email=email, password=password, **extra_fields) | |
# views.py | |
# Essa views foi só para testar a persistência | |
def add_user(request): | |
if request.method == 'POST': | |
form = UserForm(request.POST) | |
if form.is_valid(): | |
form.save() | |
form = UserForm() | |
return render(request, 'add_user.html', {'form': form}) |
<form method="post">
{% csrf_token %}
<h1>Teste</h1>
{{ form.as_p }}
<button type="submit">Adicionar</button>
</form>
# Template, acabou formatando...
admin.py
`class CustomUserCreationForm(UserCreationForm):
class Meta(UserCreationForm.Meta):
model = User
class CustomUserChangeForm(UserChangeForm):
class Meta(UserChangeForm.Meta):
model = User
class CustomUserAdmin(UserAdmin):
form = CustomUserChangeForm
add_form = CustomUserCreationForm
model = User
list_display = (
"full_name",
"email",
"username",
"date_joined",
"last_login",
"is_active",
"is_staff",
"is_superuser",
)
ordering = ["is_superuser", "is_staff", "is_active"]
search_fields = ("full_name", "email", "username")
fieldsets = (
(None, {"fields": ("full_name", "email", "password")}),
(
_("Personal info"),
{"fields": ("cpf", "rg", "birthday")},
),
(
_("Permissions"),
{
"fields": (
"is_active",
"is_staff",
"is_superuser",
"groups",
"user_permissions",
)
},
),
(_("Important dates"), {"fields": ("last_login", "date_joined")}),
)
add_fieldsets = (
(None, {"classes": ("wide",), "fields": ("full_name", "email", "password1", "password2")}),
)
readonly_fields = ("date_joined", "last_login")
def has_delete_permission(self, request, obj=None):
return True
def has_add_permission(self, request, obj=None):
return True
admin.site.register(User, CustomUserAdmin)`
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
forms.py
class UserForm(forms.ModelForm):
Template
{% csrf_token %}Teste
{{ form.as_p }} AdicionarTá na mão!