自定义登录mod时出现Django错误

2024-04-28 04:46:14 发布

您现在位置:Python中文网/ 问答频道 /正文

你好,我试图使django自定义用户模型,但我得到以下错误。-在

错误:

auth.User.groups: (fields.E304) Reverse accessor for 'User.groups' clashes with reverse accessor for 'Freelancer.groups'. HINT: Add or change a related_name argument to the definition for 'User.groups' or 'Freelancer.groups'. auth.User.user_permissions: (fields.E304) Reverse accessor for 'User.user_permissions' clashes with reverse accessor for 'Freelancer.user_permissions'. HINT: Add or change a related_name argument to the definition for 'User.user_permissions' or 'Freelancer.user_permissions'. login.Freelancer.groups: (fields.E304) Reverse accessor for 'Freelancer.groups' clashes with reverse accessor for 'User.groups'. HINT: Add or change a related_name argument to the definition for 'Freelancer.groups' or 'User.groups'. login.Freelancer.groups: (fields.E331) Field specifies a many-to-many relation through model 'login.Freelancer_groups', which has not been installed. login.Freelancer.user_permissions: (fields.E304) Reverse accessor for 'Freelancer.user_permissions' clashes with reverse accessor for 'User.user_permissions'. HINT: Add or change a related_name argument to the definition for 'Freelancer.user_permissions' or 'User.user_permissions'. login.Freelancer.user_permissions: (fields.E331) Field specifies a many-to-many relation through model 'login.Freelancer_user_permissions', which has not been installed.

System check identified 6 issues (0 silenced).

模型.py:

from django.contrib.auth.tests.custom_user import CustomUserManager
from django.db import models
from django.utils import timezone
from django.utils.http import urlquote
from django.utils.translation import ugettext_lazy as _
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin
from crm import settings


class FreelancerManager(BaseUserManager):
    def create_user(self, name, skills, password=None):
        if not name:
            raise ValueError('Users must have a unique name ')

        user = self.model(
            name=self.name,
            skills=skills,
        )
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, name, skills, password):
        """
        Creates and saves a superuser with the given email, date of
        birth and password.
        """
        user = self.create_user(
            name,
            password=password,
            skills=skills,
        )
        user.is_admin = True
        user.save(using=self._db)
        return user


class Freelancer(AbstractBaseUser, PermissionsMixin):
    name = models.OneToOneField(settings.AUTH_USER_MODEL,
                                related_name='Freelancer_profile',
                                verbose_name='name',
                                max_length=20,
                                unique=True, )

    field_of_interest = models.CharField(max_length=200)
    skills = models.TextField()
    experience = models.TextField()

    is_active = models.BooleanField(default=True)
    is_admin = models.BooleanField(default=False)

    objects = FreelancerManager()

    USERNAME_FIELD = 'name'
    REQUIRED_FIELDS = ['skills']

    class Meta:
        db_table = 'auth_user'
        verbose_name = _('user')
        verbose_name_plural = _('users')

    def get_absolute_url(self):
        return "/users/%s/" % urlquote(self.name)

    def get_short_name(self):
        return self.name

    def get_full_name(self):
        return self.name

    def __str__(self):  # __unicode__ on Python 2
        return self.name

    def has_perm(self, perm, obj=None):
        # "Does the user have a specific permission?"
        # # Simplest possible answer: Yes, always
        return True

    def has_module_perms(self, applabel):
        # "Does the user have permissions to view the app `app_label`?"
        # Simplest possible answer: Yes, always
        return True

    @property
    def is_staff(self):
        # "Is the user a member of staff?"
        # "Simplest possible answer: All admins are staf"
        return self.is_admin

# class Clients(models.Model):
#     name = models.CharField(max_length=20)
#     firm_name = models.CharField(max_length=20)
#     reference = models.CharField(max_length=200)
#     chu = models.CharField(max_length=200)
#
#     def __str__(self):
#         return self.name

管理员py:

^{pr2}$

Tags: orthenameselfpermissionsforreturnmodels
1条回答
网友
1楼 · 发布于 2024-04-28 04:46:14

您需要将AUTH_USER_MODEL设置设置为指向您的自由职业者类,这样Django知道不加载默认的用户模型。在

另外,对于自由职业者来说,拥有一对一的用户是没有意义的;这是一个替代的模式。在

相关问题 更多 >