شیرین
2 سال پیش توسط شیرین مطرح شد
2 پاسخ

خطای در جنگو1054

سلام من موقع ثبت یا ورود چنین خطایی دارم دیتابیس هم 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'")

ثبت پرسش جدید
Arshiamohammadei
تخصص : وب و هوش مصنوعی
@Arshiamohammadei 2 سال پیش مطرح شد
0

سلام خوبی ببین این خطا به این دلیل است که ستون username در جدول accounts_customuser وجود نداره

برای رفع این خطا، می‌توانید دستورات زیر را در پایتون اجرا کنید:

  1. ابتدا از پایتون shell استفاده کنید:
python manage.py shell
  1. سپس با استفاده از پکیج 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")
  1. با اضافه کردن ستون username به جدول accounts_customuser باید مشکل شما حل شود.

توجه داشته باشید اگر قبلا دیتابیس را مهاجرت کرده‌اید، باید تغییرات را با python manage.py makemigrations و python manage.py migrate هم اعمال کنید.
اگر پس از اجرای دستورات مذکور، خطای جدیدی رخ داد، لطفا اطلاعات بیشتری در مورد مشکل خود و نحوه استفاده از مدل CustomUser در برنامه‌ی خود بدهید تا بتوانم بهترین راه‌حل را برای شما پیدا کنم.


شیرین
تخصص : برنامه نویس بک اند
@sh.b 2 سال پیش آپدیت شد
0

@Arshiamohammadei

سلام ممنون از راهنماییتون من همین دستور اجرا کردم ولی باز همون خطا داد من هم کلا مدلم تغییر دادم و با 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

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام