当我试图运行makemigrations时,出现了以下错误。在
ERRORS:
remoshin_manager_sys.RemoshinDoctor.groups: (fields.E304) Reverse accessor for 'RemoshinDoctor.groups' clashes with reverse accessor for 'RemoshinManager.groups'.
HINT: Add or change a related_name argument to the definition for 'RemoshinDoctor.groups' or 'RemoshinManager.groups'.
remoshin_manager_sys.RemoshinDoctor.groups: (fields.E304) Reverse accessor for 'RemoshinDoctor.groups' clashes with reverse accessor for 'RemoshinUser.groups'.
HINT: Add or change a related_name argument to the definition for 'RemoshinDoctor.groups' or 'RemoshinUser.groups'.
remoshin_manager_sys.RemoshinDoctor.user_permissions: (fields.E304) Reverse accessor for 'RemoshinDoctor.user_permissions' clashes with reverse accessor for 'RemoshinManager.user_permissions'.
HINT: Add or change a related_name argument to the definition for 'RemoshinDoctor.user_permissions' or 'RemoshinManager.user_permissions'.
remoshin_manager_sys.RemoshinDoctor.user_permissions: (fields.E304) Reverse accessor for 'RemoshinDoctor.user_permissions' clashes with reverse accessor for 'RemoshinUser.user_permissions'.
HINT: Add or change a related_name argument to the definition for 'RemoshinDoctor.user_permissions' or 'RemoshinUser.user_permissions'.
remoshin_manager_sys.RemoshinManager.groups: (fields.E304) Reverse accessor for 'RemoshinManager.groups' clashes with reverse accessor for 'RemoshinDoctor.groups'.
HINT: Add or change a related_name argument to the definition for 'RemoshinManager.groups' or 'RemoshinDoctor.groups'.
remoshin_manager_sys.RemoshinManager.groups: (fields.E304) Reverse accessor for 'RemoshinManager.groups' clashes with reverse accessor for 'RemoshinUser.groups'.
HINT: Add or change a related_name argument to the definition for 'RemoshinManager.groups' or 'RemoshinUser.groups'.
remoshin_manager_sys.RemoshinManager.user_permissions: (fields.E304) Reverse accessor for 'RemoshinManager.user_permissions' clashes with reverse accessor for 'RemoshinDoctor.user_permissions'.
HINT: Add or change a related_name argument to the definition for 'RemoshinManager.user_permissions' or 'RemoshinDoctor.user_permissions'.
remoshin_manager_sys.RemoshinManager.user_permissions: (fields.E304) Reverse accessor for 'RemoshinManager.user_permissions' clashes with reverse accessor for 'RemoshinUser.user_permissions'.
HINT: Add or change a related_name argument to the definition for 'RemoshinManager.user_permissions' or 'RemoshinUser.user_permissions'.
remoshin_manager_sys.RemoshinUser.groups: (fields.E304) Reverse accessor for 'RemoshinUser.groups' clashes with reverse accessor for 'RemoshinDoctor.groups'.
HINT: Add or change a related_name argument to the definition for 'RemoshinUser.groups' or 'RemoshinDoctor.groups'.
remoshin_manager_sys.RemoshinUser.groups: (fields.E304) Reverse accessor for 'RemoshinUser.groups' clashes with reverse accessor for 'RemoshinManager.groups'.
HINT: Add or change a related_name argument to the definition for 'RemoshinUser.groups' or 'RemoshinManager.groups'.
remoshin_manager_sys.RemoshinUser.user_permissions: (fields.E304) Reverse accessor for 'RemoshinUser.user_permissions' clashes with reverse accessor for 'RemoshinDoctor.user_permissions'.
HINT: Add or change a related_name argument to the definition for 'RemoshinUser.user_permissions' or 'RemoshinDoctor.user_permissions'.
remoshin_manager_sys.RemoshinUser.user_permissions: (fields.E304) Reverse accessor for 'RemoshinUser.user_permissions' clashes with reverse accessor for 'RemoshinManager.user_permissions'.
HINT: Add or change a related_name argument to the definition for 'RemoshinUser.user_permissions' or 'RemoshinManager.user_permissions'.
我可以得到很多关于这个错误的信息。但我的情况似乎没有。在
我有3个项目,每个项目都有不同的自定义用户模型。我使用了3个项目中的一个数据库,每个项目都有自己的自定义用户模型。在
remoshin_user_sys/RemoshinUser远程用户
Remshin_诊所系统/医生
remoshin_经理_sys/RemoshinManager
当我试图从remoshin_manager_sys运行makemigrations时发生了此错误。我不想将RemoshinDoctor和RemoshinUser设置为RemoshinManager的自定义用户模型。在
我的设置.py如下所示。在
^{pr2}$如何避免这个错误?在
添加我的模型.py. 在
class RemoshinUserManager(BaseUserManager):
def _create_user(self, email, password, is_staff, is_superuser, **extra_fields):
now = timezone.now()
if not email:
raise ValueError('User must have a e-mail address.')
email = self.normalize_email(email)
user = self.model(email=email,
is_staff=is_staff, is_active=True,
is_superuser=is_superuser, last_login=now,
date_joined=now, **extra_fields)
user.set_password(password)
user.save(using=self._db)
return user
def create_user(self, email, password, **extra_fields):
return self.create_user(email, password, False, False, **extra_fields)
def create_superuser(self, email, password):
return self.create_user(user_email, password, True, True, **extra_fields)
@receiver(post_save, sender=settings.AUTH_USER_MODEL)
def create_auth_token(sender, instance=None, created=False, **kwargs):
if created:
Token.objects.create(user=instance)
class RemoshinUser(AbstractBaseUser, PermissionsMixin):
email = models.CharField(max_length=128, primary_key=True)
username = models.CharField(max_length=64)
user_kana_name = models.CharField(max_length=32, blank=True)
password = models.CharField(max_length=128)
user_birthdate = models.DateField(null=True, blank=True)
user_sex = models.SmallIntegerField(null=True)
user_postno = models.CharField(max_length=7, blank=True)
user_address1 = models.CharField(max_length=128)
user_address2 = models.CharField(max_length=128, blank=True)
user_telno = models.CharField(max_length=16, blank=True)
user_photo = models.ImageField(blank=True)
authentication_status = models.BooleanField(default=False)
create_date = models.DateTimeField(auto_now_add=True)
modify_date = models.DateTimeField(auto_now=True)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['user_name', 'user_telno']
objects = RemoshinUserManager()
class Meta:
verbose_name = _('user')
verbose_name_plural = _('users')
db_table = 'remosys_remoshin_user_tbl'
def get_absolute_url(self):
return "/users/%s" % urlquote(self.email)
def email_user(self, subject, message, from_email=None):
send_mail(subject, message, from_email, [self_email])
class RemoshinDoctorManager(BaseUserManager):
def _create_user(self, email, password, is_staff, is_superuser, **extra_fields):
now = timezone.now()
if not email:
raise ValueError('Doctor must have a e-mail address.')
email = self.normalize_email(email)
doctor = self.model(email=email,
is_staff=is_staff, is_active=True,
is_superuser=is_superuser, last_login=now,
date_joined=now, **extra_fields)
doctor.set_password(password)
doctor.save(using=self._db)
return doctor
def create_user(self, email, password, **extra_fields):
return self.create_user(email, password, False, False, **extra_fields)
def create_superuser(self, email, password):
return self.create_user(email, password, True, True, **extra_fields)
@receiver(post_save, sender=settings.AUTH_USER_MODEL)
def create_auth_token(sender, instance=None, created=False, **kwargs):
if created:
Token.objects.create(user=instance)
class RemoshinDoctor(AbstractBaseUser, PermissionsMixin):
doctor_id = models.CharField(max_length=16, primary_key=True)
clinic_id = models.ForeignKey(Clinic)
email = models.CharField(max_length=128)
password = models.CharField(max_length=128)
username = username = models.CharField(max_length=64)
doctor_photo = models.ImageField(blank=True, null=True)
create_date = models.DateTimeField(auto_now_add=True)
modify_date = models.DateTimeField(auto_now=True)
USERNAME_FIELD = 'doctor_id'
REQUIRED_FIELDS = ['clinic_id', 'email', 'password', 'username']
objects = RemoshinDoctorManager()
class Meta:
verbose_name = _('doctor')
verbose_name_plural = _('doctors')
db_table = 'remosys_remoshin_doctor_tbl'
def get_absolute_url(self):
return "/doctors/%s" % urlquote(self.doctor_id)
class RemoshinManagerManager(BaseUserManager):
def _create_user(self, username, email, password, is_staff, is_admin, **extra_fields):
now = timezone.now()
if not email:
raise ValueError('Manager must have a e-mail address.')
email = self.normalize_email(email)
manager = self.model(username=username, email=email,
is_active=True,
is_superuser=is_admin,
is_staff=is_staff,
create_date=now,
modify_date=now, **extra_fields)
manager.set_password(password)
manager.save(using=self._dåb)
return manager
def create_user(self, username, email, password, **extra_fields):
return self._create_user(username, email, password, False, False, **extra_fields)
def create_superuser(self, username, email, password, **extra_fields):
return self._create_user(username, email, password, True, True, **extra_fields)
@receiver(post_save, sender=settings.AUTH_USER_MODEL)
def create_auth_token(sender, instance=None, created=False, **kwargs):
if created:
Token.objects.create(user=instance)
class RemoshinManager(AbstractBaseUser, PermissionsMixin):
manager_id = models.CharField(max_length=16, primary_key=True)
email = models.CharField(max_length=128)
password = models.CharField(max_length=128)
username = models.CharField(max_length=64)
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
is_staff = models.BooleanField(default=False)
create_date = models.DateTimeField(default=timezone.now)
modify_date = models.DateTimeField(default=timezone.now)
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['email']
objects = RemoshinManagerManager()
class Meta:
verbose_name = _('manager')
verbose_name_plural = _('managers')
db_table = 'remosys_remoshin_manager_tbl'
def get_absolute_url(self):
return "/managers/%s" % urlquote(self.manager_id)
def email_user(self, subject, message, from_email=None):
send_mail(subject, message, from_email, [self.email])
def user_has_perm(username, perm, obj):
A backend can raise `PermissionDenied` to short-circuit permission checking.
return _user_has_perm(username, perm, obj)
def has_perm(self, perm, obj=None):
return _user_has_perm(self, perm, obj=obj)
def has_module_perms(self, app_label):
return self.is_superuser
def get_short_name(self):
return self.first_name
@property
def is_superuser(self):
return self.is_admin
class Consultation(models.Model):
consultation_id = models.CharField(max_length=8, primary_key=True)
user_email = models.ForeignKey(RemoshinUser)
clinic_id = models.ForeignKey(Clinic)
doctor_id = models.ForeignKey(RemoshinDoctor)
consultation_datetime = models.DateTimeField(auto_now=True)
consultation_status = models.BooleanField(default=False)
prescription = models.TextField(blank=True)
prescription_status = models.SmallIntegerField(default=0)
payment_status = models.SmallIntegerField(default=0)
create_date = models.DateTimeField(auto_now_add=True)
modify_date = models.DateTimeField(auto_now=True)
class Meta:
db_table = 'remosys_consultation_tbl'
# swappable = 'settings.AUTH_USER_MODEL'
我用一个例子来解释这个错误:
你有这两种型号的吗。在
简单的模型,但棘手的部分是,每当您定义外键时,Django都会构建反向引用:如果
person
是一个查询对象,那么对她拥有的书的标题的引用应该是:person.own_book.title
。在现在,如果你想知道拥有某本书的人的名字?Django构建反向关系,默认情况下使用模型名称。也就是说,“book”是一个queryset对象,您可以使用
book.person.name
找到拥有该书的人的姓名。很酷,对吧?它会查到你的外键。在现在,向同一图书模型添加另一个外键:
^{pr2}$你的前向关系仍然定义良好:}。但是
person.wrote_book.title
和{book.person.name
该怎么办呢?查找拥有这本书的人的名字?写了这本书的人?还是两者都有?在那里,django只是抛出你的Reverse acessor error
。在如何修复?在名字中告诉你创建一个相关的模型:
因此}替换。在
book.person.name
不再存在(默认为覆盖),它被book.own.name
和{所以我的猜测是:寻找在
groups
和user_permissions
模型中定义的外键,并在它们上添加相关的参数。在相关问题 更多 >
编程相关推荐