Rumah  >  Soal Jawab  >  teks badan

django.db.utils.IntegrityError: (1452, 'Tidak boleh menambah atau mengemas kini baris anak: kekangan kunci asing gagal

rreeee

Model saya dulu macam ni.

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

Kemudian saya menukar kepada mewarisi dari model pengguna admin asas seperti ini.

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

Kini apabila saya menjalankan makemigration dan berhijrah, saya mendapat ralat berikut.

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

Sila lihat. Bagaimana saya boleh menyelesaikan masalah ini dengan selamat. Kerana saya mempunyai data dalam pangkalan data saya dan jadual log masuk adalah kunci asing kepada banyak jadual.

Operations to perform:
        Apply all migrations: admin, api, auth, authtoken, contenttypes, sessions
        Running migrations:
        Applying api.0278_auto_20220318_1210...Traceback (most recent call last):
        File "/Users/soubhagyapradhan/Desktop/upwork/polyverse/polyverse_api/env/lib/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
            return self.cursor.execute(sql, params)
        File "/Users/soubhagyapradhan/Desktop/upwork/polyverse/polyverse_api/env/lib/python3.8/site-packages/django/db/backends/mysql/base.py", line 73, in execute
            return self.cursor.execute(query, args)
        File "/Users/soubhagyapradhan/Desktop/upwork/polyverse/polyverse_api/env/lib/python3.8/site-packages/MySQLdb/cursors.py", line 206, in execute
            res = self._query(query)
        File "/Users/soubhagyapradhan/Desktop/upwork/polyverse/polyverse_api/env/lib/python3.8/site-packages/MySQLdb/cursors.py", line 319, in _query
            db.query(q)
        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)
        MySQLdb._exceptions.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`))')

        The above exception was the direct cause of the following exception:

        Traceback (most recent call last):
        File "manage.py", line 22, in <module>
            main()
        File "manage.py", line 18, in main
            execute_from_command_line(sys.argv)
        File "/Users/soubhagyapradhan/Desktop/upwork/polyverse/polyverse_api/env/lib/python3.8/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
            utility.execute()
        File "/Users/soubhagyapradhan/Desktop/upwork/polyverse/polyverse_api/env/lib/python3.8/site-packages/django/core/management/__init__.py", line 413, in execute
            self.fetch_command(subcommand).run_from_argv(self.argv)
        File "/Users/soubhagyapradhan/Desktop/upwork/polyverse/polyverse_api/env/lib/python3.8/site-packages/django/core/management/base.py", line 354, in run_from_argv
            self.execute(*args, **cmd_options)
        File "/Users/soubhagyapradhan/Desktop/upwork/polyverse/polyverse_api/env/lib/python3.8/site-packages/django/core/management/base.py", line 398, in execute
            output = self.handle(*args, **options)
        File "/Users/soubhagyapradhan/Desktop/upwork/polyverse/polyverse_api/env/lib/python3.8/site-packages/django/core/management/base.py", line 89, in wrapped
            res = handle_func(*args, **kwargs)
        File "/Users/soubhagyapradhan/Desktop/upwork/polyverse/polyverse_api/env/lib/python3.8/site-packages/django/core/management/commands/migrate.py", line 244, in handle
            post_migrate_state = executor.migrate(
        File "/Users/soubhagyapradhan/Desktop/upwork/polyverse/polyverse_api/env/lib/python3.8/site-packages/django/db/migrations/executor.py", line 117, in migrate
            state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial)
        File "/Users/soubhagyapradhan/Desktop/upwork/polyverse/polyverse_api/env/lib/python3.8/site-packages/django/db/migrations/executor.py", line 147, in _migrate_all_forwards
            state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
        File "/Users/soubhagyapradhan/Desktop/upwork/polyverse/polyverse_api/env/lib/python3.8/site-packages/django/db/migrations/executor.py", line 227, in apply_migration
            state = migration.apply(state, schema_editor)
        File "/Users/soubhagyapradhan/Desktop/upwork/polyverse/polyverse_api/env/lib/python3.8/site-packages/django/db/migrations/migration.py", line 126, in apply
            operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
        File "/Users/soubhagyapradhan/Desktop/upwork/polyverse/polyverse_api/env/lib/python3.8/site-packages/django/db/migrations/operations/fields.py", line 104, in database_forwards
            schema_editor.add_field(
        File "/Users/soubhagyapradhan/Desktop/upwork/polyverse/polyverse_api/env/lib/python3.8/site-packages/django/db/backends/mysql/schema.py", line 98, in add_field
            super().add_field(model, field)
        File "/Users/soubhagyapradhan/Desktop/upwork/polyverse/polyverse_api/env/lib/python3.8/site-packages/django/db/backends/base/schema.py", line 522, in add_field
            self.execute(sql, params)
        File "/Users/soubhagyapradhan/Desktop/upwork/polyverse/polyverse_api/env/lib/python3.8/site-packages/django/db/backends/base/schema.py", line 145, in execute
            cursor.execute(sql, params)
        File "/Users/soubhagyapradhan/Desktop/upwork/polyverse/polyverse_api/env/lib/python3.8/site-packages/django/db/backends/utils.py", line 98, in execute
            return super().execute(sql, params)
        File "/Users/soubhagyapradhan/Desktop/upwork/polyverse/polyverse_api/env/lib/python3.8/site-packages/django/db/backends/utils.py", line 66, in execute
            return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
        File "/Users/soubhagyapradhan/Desktop/upwork/polyverse/polyverse_api/env/lib/python3.8/site-packages/django/db/backends/utils.py", line 75, in _execute_with_wrappers
            return executor(sql, params, many, context)
        File "/Users/soubhagyapradhan/Desktop/upwork/polyverse/polyverse_api/env/lib/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
            return self.cursor.execute(sql, params)
        File "/Users/soubhagyapradhan/Desktop/upwork/polyverse/polyverse_api/env/lib/python3.8/site-packages/django/db/utils.py", line 90, in __exit__
            raise dj_exc_value.with_traceback(traceback) from exc_value
        File "/Users/soubhagyapradhan/Desktop/upwork/polyverse/polyverse_api/env/lib/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
            return self.cursor.execute(sql, params)
        File "/Users/soubhagyapradhan/Desktop/upwork/polyverse/polyverse_api/env/lib/python3.8/site-packages/django/db/backends/mysql/base.py", line 73, in execute
            return self.cursor.execute(query, args)
        File "/Users/soubhagyapradhan/Desktop/upwork/polyverse/polyverse_api/env/lib/python3.8/site-packages/MySQLdb/cursors.py", line 206, in execute
            res = self._query(query)
        File "/Users/soubhagyapradhan/Desktop/upwork/polyverse/polyverse_api/env/lib/python3.8/site-packages/MySQLdb/cursors.py", line 319, in _query
            db.query(q)
        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`))')

P粉615886660P粉615886660245 hari yang lalu439

membalas semua(1)saya akan balas

  • P粉392861047

    P粉3928610472024-02-18 00:28:07

    Dari User 模型继承是行不通的,因为它有自己的主键 id。您在 Login 模型中定义了一个主键 pid . Sebaliknya, jika anda hanya mahu menggunakan User 字段扩展 Login 模型,则可以从 AbstractUser warisan kelas.

    Jika anda ingin bertukar kepada Login 模型作为默认用户模型,您必须以某种方式将数据从 auth_user 表迁移到 api_login 表,使用数据迁移或 SQL,并设置 AUTH_USER_MODEL = "api.登录“

    balas
    0
  • Batalbalas