Миграция для OneToOneField возвращает ошибку следующим образом:
MySQLdb._exceptions.OperationalError: (1824, "Не удалось открыть ссылочную таблицу 'auth_user'")
Мои модели имеют вид следует:
class Employer(models.Model):
emp_Name = models.OneToOneField(User,
on_delete=models.CASCADE, null=True)
emp_Company = models.CharField(max_length=100)
emp_Address = models.CharField(max_length=500)
emp_Tel = models.CharField(max_length=100)
emp_JobTitle = models.CharField(max_length=200, null=True)
emp_JobDesc = models.CharField(max_length=600, null=False)
def __str__(self):
return self.emp_Name
class CVmaker(models.Model):
cv_User = models.OneToOneField(User, on_delete=models.CASCADE)
cv_Title = models.CharField(max_length=100)
cv_Basic = models.CharField(max_length=100)
cv_Timeline = models.ForeignKey('Journeyeval',
on_delete=models.CASCADE)
cv_ComAddress = models.CharField(max_length=400)
cv_Edu = models.CharField(max_length=500)
cv_Test = models.CharField(max_length=500)
cv_Mmedia = models.ImageField(upload_to='candidates_pics/')
cv_Referrals = models.CharField(max_length=400)
cv_Templates = models.CharField(max_length=400)
def __str__(self):
return self.cv_Title
У меня есть два маршрутизатора базы данных: один для [auth, session, admin и contenttypes], а другой для основного приложения. Это работает для ForeignKey. Я создаю портал вакансий и требую, чтобы работодатель также мог войти в систему.
Маршрутизаторы выглядят следующим образом:
class AuthRouter:
route_app_labels = ('auth', 'contenttypes', 'sessions',
'admin')
def db_for_read(self, model, **hints):
if model._meta.app_label in self.route_app_labels:
return "default"
return False
def db_for_write(self, model, **hints):
if model._meta.app_label in self.route_app_labels:
return "default"
return False
def allow_relation(self, obj1, obj2, **hints):
if (obj1._meta.app_label in self.route_app_labels or
obj2._meta.app_label == 'redford'
):
return True
return None
def allow_migrate(self, db, app_label, model_name=None,
**hints):
if db == 'default':
if app_label in
('auth','admin','sessions','contenttypes'):
return True
else:
return False
elif app_label in ['auth','admin','sessions','contenttypes']:
return False
# Otherwise no opinion, defer to other routers or default database
return None
Для типа аутентификации есть два значения по умолчанию для базы данных и 'redford_db' для класса работодателя. Маршрутизаторы, работающие с ForeignKey, имеют эту проблему только с OneToOneKey. Кроме того, при появлении ошибки я снова перенастраиваю базу данных, она работает без ошибок, и мне кажется, что все таблицы созданы нормально.