gpt4 book ai didi

python - 当 models.py 中有 3 个自定义模型时,Django makemigrations 错误

转载 作者:行者123 更新时间:2023-12-01 02:39:08 29 4
gpt4 key购买 nike

当我尝试运行 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

remoshin_clinic_sys/RemoshinDoctor

remoshin_manager_sys/RemoshinManager

当我尝试从 remoshin_manager_sys 运行 makemigrations 时发生此错误。我不想将 RemoshinDoctor 和 RemoshinUser 设置为 RemoshinManager 的自定义用户模型。

我的settings.py如下。

AUTH_USER_MODEL = 'remoshin_manager_sys.RemoshinManager'

如何避免此错误?

添加我的 models.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'

最佳答案

我将用一个例子来解释这个错误:

假设您有这两个模型。

class Book(Models.model):
title = models.CharField(maxlength = 100)

class Person(Models.model):
name = models.CharField(max_length = 100)
own_book = models.ForeignKey('Book')

简单的模型,但棘手的部分是只要定义外键,Django 就会构建反向引用:如果 person 是一个查询对象,则对她拥有的书名的前向引用将是: person.own_book.title

现在,如果您想知道拥有某本书的人的名字? Django 构建反向关系,默认采用模型名称。也就是说,“book”是一个查询集对象,您可以使用 book.person.name 查找拥有这本书的人员姓名。很酷,对吧?它会查看您的外键。

现在,向同一本书模型添加另一个外键:

class Person(Models.model):
name = models.CharField(max_length = 100)
wrote_book = models.ForeignKey('Book')
own_book = models.ForeignKey('Book')

您的转发关系仍然定义良好:person.wrote_book.titleperson.own_book.title。但是 book.person.name 应该做什么呢?查找拥有这本书的人的姓名?这本书是由谁写的?或两者? django 只是抛出你的反向访问器错误

如何解决? Djangos 告诉您在模型中创建一个 related_name:

class Person(Models.model):
name = models.CharField(max_length = 100)
wrote_book = models.ForeignKey('Book', related_name = 'wrote')
own_book = models.ForeignKey('Book', related_name = 'own')

因此,book.person.name不再存在(默认被覆盖),它被book.own.namebook.wrote取代。名称

所以我的猜测是:查找在 groupsuser_permissions 模型中定义的外键,并在其上放置 related_names 参数。

关于python - 当 models.py 中有 3 个自定义模型时,Django makemigrations 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45910786/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com