【问题标题】:Use Phone number Field In AbstractBaseUser Django在 AbstractBaseUser Django 中使用电话号码字段
【发布时间】:2021-12-02 23:15:32
【问题描述】:

我正在使用This Package,但是当我想构建数据库并迁移时,它给了我一个错误:

“ImportError:模块‘Accounts.apps’不包含‘AccountsConfigphonenumber_field’类。选项有:‘AccountsConfig’。”

如何在基本用户模型中使用另一个包应用程序?

模型.py:

class User(AbstractBaseUser):
    email = models.EmailField(unique=True, max_length=255)
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=200)
    phone_number = PhoneNumberField(unique=True)
    address = models.TextField(max_length=1000)
    is_active = models.BooleanField(default=True)
    is_admin = models.BooleanField(default=False)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = 'phone_number'

    objects = UserManager()

    def __str__(self):
        return self.email

    def has_perm(self, perm, obj=None):
        return True

    def has_module_perms(self, app_label):
        return True

    @property
    def is_staff(self):
        return self.is_admin

设置(本节):


INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'Accounts.apps.AccountsConfig'
    'phonenumber_field',
]

AUTH_USER_MODEL = 'Accounts.User'

Forms.py:

from django import forms
from .models import User
from django.contrib.auth.forms import ReadOnlyPasswordHashField
from phonenumber_field.modelfields import PhoneNumberField
from phonenumber_field.widgets import PhoneNumberPrefixWidget


class UserCreationForm(forms.ModelForm):
    phone_number = PhoneNumberField(widget=PhoneNumberPrefixWidget(initial='IR'))
    password = forms.CharField(label='Password', widget=forms.PasswordInput)

    class Meta:
        model = User
        fields = ('email', 'password', 'phone_number')


class UserChangeForm(forms.ModelForm):
    password = ReadOnlyPasswordHashField()

    class Meta:
        model = User
        fields = '__all_

Managers.py


from django.contrib.auth.models import BaseUserManager


class UserManager(BaseUserManager):
    def create_user(self, email, phone_number, password=None):
        if not email:
            raise ValueError('Users Must Have An Email Address')
        if not phone_number:
            raise ValueError('Users Must Have A Phone Number')
        user = self.model(
            email=self.normalize_email(email),
            phone_number=phone_number,
        )
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, email, phone_number, password=None):
        user = self.create_user(
            email=email,
            password=password,
            phone_number=phone_number,
        )
        user.is_admin = True
        user.save(using=self._db)
        return user

图片:Error Pic

【问题讨论】:

    标签: python python-3.x django sqlite django-models


    【解决方案1】:

    这里少了一个逗号:

    INSTALLED_APPS = [
        ...
        'Accounts.apps.AccountsConfig',  # <-- here
        'phonenumber_field',
    ]
    

    【讨论】:

    • 谢谢,是的,我错过了一个逗号;这是一个愚蠢的错误。之后,它给了我一个关于小部件的错误,我不得不删除它。有什么方法可以在表单和管理面板中使用“PhoneNumberPrefixWidget(initial='IR')”?
    猜你喜欢
    • 2010-12-19
    • 2017-02-08
    • 1970-01-01
    • 1970-01-01
    • 2018-12-18
    • 2020-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多