Расширение модели django.contrib.auth.User - PullRequest
0 голосов
/ 23 сентября 2019

Я использую django.contrib.auth и у меня есть работающая система входа в систему / регистрации, однако я хочу расширить мою модель пользователя, чтобы у нее был только уличный адрес и номер телефона для регистрации, и я не уверен, как можноЯ делаю это правильно.То, что я сделал, работает, но чувствует себя неправильно, и я хотел бы знать правильный способ сделать это.

Я создал accounts приложение и в models.py У меня есть это:

from django.db import models
from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    address = models.CharField(max_length=200)
    address_number = models.CharField(max_length=20)
    phone = models.CharField(max_length=20)

... тогда я зарегистрировал это в admin.py:

from django.contrib import admin

from .models import User

admin.site.register(User)

... затем в settings.py я добавил эту строку:

AUTH_USER_MODEL = 'accounts.User'

... и везде, где яиспользовал django.contrib.auth.User, теперь я использую accounts.models.User.

Как я уже сказал, это работает, однако это почему-то кажется неправильным, и это легко может быть, поскольку я впервые расширяю модель User.Почему я думаю, что это неправильно?С одной стороны, Users исчез в админке из «Аутентификации и авторизации» и вместо этого находится в «Аккаунтах» (как и ожидалось).

Как я могу сделать это надлежащим образом?

@EDIT:

Вот моя регистрационная форма:

from django import forms
from accounts.models import User


class RegistrationForm(forms.ModelForm):
    email = forms.EmailField(max_length=200, help_text='Required')
    password = forms.CharField(label='Password', widget=forms.PasswordInput)
    password2 = forms.CharField(label='Repeat password', widget=forms.PasswordInput)

    class Meta:
        model = User
        fields = (
            'username',
            'email',
            'first_name',
            'last_name',
            'address',
            'address_number',
            'phone'
        )

    def clean_password2(self):
        cd = self.cleaned_data
        if cd['password'] != cd['password2']:
            raise forms.ValidationError('Passwords do not match.')
        return cd['password2']

    def clean_email(self):
        email = self.cleaned_data['email']
        if User.objects.filter(email=email).exists():
            raise forms.ValidationError(
                'Please use another e-mail, that is already taken.')
        return email
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...