Django Миграция с использованием OneToOneField - PullRequest
1 голос
/ 23 февраля 2020

Миграция для 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. Кроме того, при появлении ошибки я снова перенастраиваю базу данных, она работает без ошибок, и мне кажется, что все таблицы созданы нормально.

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