Не удается разрешить ключевое слово is_active в поле? Варианты: активный, администратор, электронная почта, полное имя, идентификатор и т. Д. - PullRequest
0 голосов
/ 01 февраля 2020

После переключения на django пароль сброса пользовательской модели пользователя не работает и показывает эти ошибки ....

Внутренняя ошибка сервера: / сброс пароля / обратная трассировка (последний последний вызов) :

Файл "/home/nasrullah/.local/lib/python3.6/site-packages/django/core/handlers/exception.py", строка 34, во внутреннем ответе = get_response (запрос )

Файл "/home/nasrullah/.local/lib/python3.6/site-packages/django/core/handlers/base.py", строка 126, в _get_response response = self.process_exception_by_middleware (e, запрос)

Файл "/home/nasrullah/.local/lib/python3.6/site-packages/django/core/handlers/base.py", строка 124, в ответе _get_response = wrapped_callback (запрос, * callback_args, ** callback_kwargs)

Файл "/home/nasrullah/.local/lib/python3.6/site-packages/django/views/generic/base.py" строка 68, в поле зрения возвращает self.dispatch (запрос, * args, ** kwargs)

Файл "/home/nasrullah/.local/lib/python3.6/site-packages/django/ Utils / decorators.p y ", строка 45, в _wrapper возвращает bound_method (* args, ** kwargs)

Файл" /home/nasrullah/.local/lib/python3.6/site-packages/django/utils/ decorators.py ", строка 142, в ответе _wrapped_view = view_fun c (запрос, * args, ** kwargs)

Файл" /home/nasrullah/.local/lib/python3.6/ site-packages / django / db / models / sql / query.py ", строка 1263, в предложении add_q, _ = self._add_q (q_object, self.used_aliases)

File" / home / nasrullah /. local / lib / python3 .6 / site-packages / django / db / models / sql / query.py ", строка 1287, в _add_q split_subq = split_subq,

File" / home / nasrullah /. local / lib / python3 .6 / site-packages / django / db / models / sql / query.py ", строка 1164, в поисках build_filter, части, reffed_expression = self.solve_lookup_type (arg)

Файл "/home/nasrullah/.local/lib/python3.6/site-packages/django/db/models/sql/query.py", строка 1028, в solve_lookup_type _, поле _, lookup_parts = self. names_to_path (lookup_splitted, self.get_meta ())

Файл "/home/nasrullah/.local/ lib / python3 .6 / site-packages / django / db / models / sql / query.py ",

строка 1389, в names_to_path" Варианты:% s "% (name,", " .join (доступно))) django .core.exceptions.FieldError: Невозможно разрешить ключевое слово 'is_active'

в поле. Доступны следующие варианты: активный, администратор, электронная почта, полное имя, идентификатор, изображение,

last_login, logentry, пароль, должность, персонал, временная метка [01 / Feb / 2020

13: 03: 45] «POST / сброс пароля / HTTP / 1.1» 500 149279

urls.py

from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
from django.contrib.auth import views as auth_views
from users import views as user_views


urlpatterns = [
    path('admin/', admin.site.urls),
    path('register/', user_views.register, name='register'),
    path('profile/', user_views.profile, name='profile'),
    #path('login/',auth_views.LoginView.as_view(template_name= 'users/login.html'), name='login'),
    path('login/',user_views.login_page, name='login'),
    path('logout/', auth_views.LogoutView.as_view(template_name='users/logout.html'), name='logout'),
    path('password-reset/',
             auth_views.PasswordResetView.as_view(
             template_name='users/password_reset.html'
         ),
         name='password_reset'),
    path('password-reset/done/',
             auth_views.PasswordResetDoneView.as_view(
             template_name='users/password_reset_done.html'
         ),
         name='password_reset_done'),
    path('password-reset-confirm/<uidb64>/<token>/',
             auth_views.PasswordResetConfirmView.as_view(
             template_name='users/password_reset_confirm.html'
         ),
         name='password_reset_confirm'),
    path('password-reset-complete/',
             auth_views.PasswordResetCompleteView.as_view(
             template_name='users/password_reset_complete.html'
         ),
         name='password_reset_complete'),
    path('', include('blog.urls')),

]

models.py

from django.db import models
from PIL import Image
from django.conf import settings
from django.contrib.auth.models import (
     AbstractBaseUser, BaseUserManager
)

class UserManager(BaseUserManager):

    def create_user(self, email, full_name, password, is_active=True,is_staff=False,is_admin=False):
        """
        Creates and saves a User with the given email and password.
        """
        if not email:
            raise ValueError('Users must have an email address')
        if not password:
            raise ValueError('Users must have a password')

        if not full_name:
            raise ValueError('Users must have a full name')

        user = self.model(
            email=self.normalize_email(email),
        )
        user.active = True
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_staffuser(self, email, full_name, password):
        """
        Creates and saves a staff user with the given email and password.
        """
        user = self.create_user(
            email,
            full_name,
            password=password,
        )
        user.staff = True
        user.save(using=self._db)
        return user

    def create_superuser(self, email, full_name, password):
        """
        Creates and saves a superuser with the given email and password.
        """
        user = self.create_user(
            email,
            full_name,
            password=password,
        )
        user.staff = True
        user.admin = True
        user.save(using=self._db)
        return user

class User(AbstractBaseUser):
    email    = models.EmailField(
            verbose_name='email address',
            max_length=255,
            unique=True,
        )
    full_name = models.CharField(max_length=255, blank=True, null=True)
    image = models.ImageField(default='default.jpg', upload_to='profile_pics/')
    active    = models.BooleanField(default=True)
    staff      = models.BooleanField(default=False)
    admin   = models.BooleanField(default=False)
    timestamp =models.DateTimeField(auto_now_add=True)


    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['full_name']

    objects = UserManager()

    def __str__(self):
        return self.email
    def save(self, *args, **kwargs):
        super(User, self).save(*args, **kwargs)


        img = Image.open(self.image.path)

        if img.height > 300 or img.width > 300:
            output_size = (300, 300)
            img.thumbnail(output_size)
            img.save(self.image.path)

    def get_full_name(self):
        if self.full_name:
            return self.full_name
        return self.email

    def get_short_name(self):
        return self.email




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

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

    def has_module_perms(self, app_label):
       return self.is_admin

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

    @property
    def is_active(self):
        return self.active



class GuestEmail(models.Model):
    email = models.EmailField()
    active = models.BooleanField(default=True)
    update = models.DateTimeField(auto_now=True)
    timestamp = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.email

1 Ответ

0 голосов
/ 01 февраля 2020

Где-то (в коде, который вы не включили, views.py скорее всего) вы пытаетесь отфильтровать или запросить модель User над полем is_active. Однако это поле не существует в модели, оно является property модели и поэтому не может быть разрешено.

Прочтите сообщение об ошибке, и оно точно скажет вам следующее:

Cannot resolve keyword 'is_active' into field.
Choices are: active, admin, email, full_name, id, image, last_login, logentry, password, post, staff, timestamp

Это поля в User, и, следовательно, это поля, доступные для запроса по этой модели.

Итак, убедитесь, что входные аргументы, передаваемые в запрос (везде, где это происходит), используют active вместо is_active и оно должно быть успешным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...