سلام من موقع ثبت یا ورود چنین خطایی دارم دیتابیس هم mysql هست ممنون راهنمایی کنید
class CustomUser(AbstractUser):
age = models.PositiveIntegerField(null=True, blank=True)
phone = models.BigIntegerField(verbose_name='موبایل', blank=True, null=True)
address = models.CharField(max_length=300, null=True, blank=True)
profile_image = models.ImageField(upload_to='profile/', null=True, blank=True)
postal_code = models.CharField(max_length=20, null=True, blank=True)
def __str__(self):
return self.username
@admin.register(CustomUser)
class CustomUserAdmin(UserAdmin):
add_form = CustomUserCreationForm
form = CustomUserChangeForm
model = CustomUser
list_display = ('username', 'email', 'age', 'is_staff', 'phone', 'address', 'postal_code', 'profile_image')
list_filter = ('email',)
fieldsets = UserAdmin.fieldsets + (
(None, {'fields': ('age', 'phone', 'address', 'postal_code', 'profile_image',)}),
)
add_fieldsets = UserAdmin.add_fieldsets + (
(None, {'fields': ('age', 'phone', 'address', 'postal_code', 'profile_image', )}),
)
OperationalError at /accounts/login/
(1054, "Unknown column 'accounts_customuser.username' in 'field list'")
سلام خوبی ببین این خطا به این دلیل است که ستون username
در جدول accounts_customuser
وجود نداره
برای رفع این خطا، میتوانید دستورات زیر را در پایتون اجرا کنید:
python manage.py shell
django.db.connection
به دیتابیس متصل شوید:from django.db import connection
with connection.cursor() as cursor:
cursor.execute("ALTER TABLE accounts_customuser ADD COLUMN username VARCHAR(150) NOT NULL UNIQUE")
username
به جدول accounts_customuser
باید مشکل شما حل شود. توجه داشته باشید اگر قبلا دیتابیس را مهاجرت کردهاید، باید تغییرات را با python manage.py makemigrations
و python manage.py migrate
هم اعمال کنید.
اگر پس از اجرای دستورات مذکور، خطای جدیدی رخ داد، لطفا اطلاعات بیشتری در مورد مشکل خود و نحوه استفاده از مدل CustomUser
در برنامهی خود بدهید تا بتوانم بهترین راهحل را برای شما پیدا کنم.
سلام ممنون از راهنماییتون من همین دستور اجرا کردم ولی باز همون خطا داد من هم کلا مدلم تغییر دادم و با abstractbaseuserنوشتم
من موقع ثبت نام و لاگین با مدل قبلی مشکلی نداشتم الان که میخوام لاگین با کد یکبار مصرف انجام بدم همه چیز بهم ریخت الن کد هارو بصورت زیر بازنویسی کردم و چنین خطایی موقع migrateدارم ممنون راهنماییم کنید و مورد دوم اینکه اگر از مدل قبلی استفاده کنم فقط usermanagerبراش بنویسم کافیه یا باید به روش دوم باشه
django.db.utils.OperationalError: (1091, "Can't DROP 'is_staff'; check that column/key exists")
class CustomUser(AbstractBaseUser):
username = models.CharField(max_length=50, verbose_name='نام', blank=True, null=True, unique=True)
email = models.EmailField()
age = models.PositiveIntegerField(null=True, blank=True)
phone = models.BigIntegerField(verbose_name='موبایل', blank=True, null=True)
address = models.CharField(max_length=300, null=True, blank=True)
profile_image = models.ImageField(upload_to='profile/', null=True, blank=True)
postal_code = models.CharField(max_length=20, null=True, blank=True)
create = models.DateTimeField(auto_now_add=True, verbose_name='تاریخ', blank=True, null=True, )
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
permission = models.ManyToManyField(Permission, related_name='CustomUser')
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['phone']
objects = CustomUserManager()
class Meta:
verbose_name = "کاربر"
verbose_name_plural = "کاربران"
def __str__(self):
return self.username
def has_perm(self, perm, obj=None):
return True
def has_module_perms(self, app_label):
return True
def get_user_permissions(self, obj=None):
return _user_get_permissions(self, obj, 'CustomUser')
def get_all_permissions(self, obj=None):
return _user_get_permissions(self, obj, 'all')
@property
def is_staff(self):
return self.is_admin
class CustomUserManager(BaseUserManager):
def create_user(self, email, username, phone, password):
if not email:
raise ValueError('plz input email')
if not username:
raise ValueError('plz input username')
if not phone:
raise ValueError('plz input phone')
user = self.model(email=self.normalize_email(email), username='username', phone='phone')
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, username, phone, password):
user = self.create_user(email, username, phone, password)
user.is_admin = True
user.save(using=self._db)
return user
class CustomUserAdmin(UserAdmin):
add_form = CustomUserCreationForm
form = CustomUserChangeForm
model = CustomUser
list_display = (
'username', 'password',
)
list_filter = ('email', 'is_active',)
fieldsets = UserAdmin.fieldsets + (
('User', {'fields': ('is_admin',)}),
)
add_fieldsets = UserAdmin.add_fieldsets + (
('personal info', {'fields': ('is_active',)}),
)
add_fieldsets = (
(None, {'fields': ('username', 'email', 'phone', 'password1', 'password2')}),
)
search_fields = ('username',)
ordering = ('username',)
filter_horizontal = ()
class CustomUserCreationForm(UserCreationForm):
class Meta:
model = CustomUser
fields = UserCreationForm.Meta.fields + ('phone',)
labels = {
'phone': 'شماره موبایل',
}
class CustomUserChangeForm(UserChangeForm):
class Meta:
model = CustomUser
fields = UserChangeForm.Meta.fields
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟