Django.db.utils.IntegrityError: (1452, 'Cannot add or update a child row: a foreign key constraint fails

from django.db import models
from django.contrib.auth.models import User

Ранее мои модели были такими .

class Login(models.Model):
    pid              = models.AutoField(primary_key=True)
    custom_username  = models.BooleanField(default=False)
    tnx_hash         = models.CharField(max_length=100, null=True, blank=True)

    def __str__(self):
        return self.username

Затем я изменил его на такой, чтобы наследовать от базовой модели пользователя admin.

class Login(User):
    pid              = models.AutoField(primary_key=True)
    custom_username  = models.BooleanField(default=False)
    tnx_hash         = models.CharField(max_length=100, null=True, blank=True)

    def __str__(self):
        return self.username

Теперь, когда я запускаю makemigrations и migrate, получаю следующую ошибку .

    File "/Users/soubhagyapradhan/Desktop/upwork/polyverse/polyverse_api/env/lib/python3.8/site-packages/MySQLdb/connections.py", line 259, in query
        _mysql.connection.query(self, query)
    django.db.utils.IntegrityError: (1452, 'Cannot add or update a child row: a foreign key constraint fails (`baby`.`#sql-16a7_6a`, CONSTRAINT `api_login_user_ptr_id_7f748092_fk_auth_user_id` FOREIGN KEY (`user_ptr_id`) REFERENCES `auth_user` (`id`))')

Пожалуйста, посмотрите. Как я могу безопасно решить эту проблему. Потому что у меня есть данные в моей базе данных и таблица login является внешним ключом для многих таблиц.

Наследование от модели User не работает, поскольку у нее есть собственный первичный ключ id. У вас есть первичный ключ, определенный pid в вашей модели Login. Вместо этого, если вы хотите расширить модель Login только полями User, вы можете наследоваться от класса AbstractUser.

Если вы хотите переключиться на модель Login в качестве модели пользователя по умолчанию, вам придется каким-то образом перенести данные из таблицы auth_user в таблицу api_login, используя миграцию данных или SQL, а также установить AUTH_USER_MODEL = "api.Login"

Вернуться на верх