django.db.utils.IntegrityError:

新手上路,请多包涵

django.db.utils.IntegrityError:主键为“1”的表“main_tutorial”中的行有一个无效的外键:main_tutorial.tutorial_series_id 包含一个值“tutorial_series_id”,它在 main_tutorialseries.id 中没有相应的值。

出现以上错误,无法迁移

这些是我的模型:

     from django.db import models
    from datetime import datetime
    #Create your models here.

    class TutorialCategory(models.Model):
        tutorial_category = models.CharField(max_length=200)
        category_summary = models.CharField(max_length=200)
        category_slug = models.CharField(max_length=200, default=1)

        class Meta:
            #Gives the proper plural name for admin
            verbose_name_plural = "Categories"

        def __str__(self):
            return self.tutorial_category

    class TutorialSeries(models.Model):
        tutorial_series = models.CharField(max_length=200)
        tutorial_category = models.ForeignKey(TutorialCategory, default=1,verbose_name="Category", on_delete=models.SET_DEFAULT)
        series_summary = models.CharField(max_length=200)

        class Meta:
            #Otherwise we get "Tutorial Serie*ss* in admin"
            verbose_name_plural = "Series"

        def __str__(self):
            return self.tutorial_series

    class Tutorial(models.Model):
        tutorial_title = models.CharField(max_length=200)
        tutorial_content = models.TextField()
        tutorial_published = models.DateTimeField("date published", default = datetime.now())
        tutorial_series = models.ForeignKey(TutorialSeries, default=1, verbose_name="Series", on_delete=models.SET_DEFAULT)
        tutorial_slug = models.CharField(max_length=200,default=1)

        def __str__(self):
            return self.tutorial_title

原文由 Kayondo Ronald 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 558
1 个回答

我遇到了同样的问题,只是我也在处理同样的问题。你所要做的就是

只需从“main()”和 db.sqlite 文件中删除“migrations”文件夹即可。

发生该错误的原因可能是我们在数据库中已经有了 Tutorial,它没有链接到 TutorialSeries,所以……要使其链接到数据库,请进行上述更改,然后再次执行命令。

我得到的是:

 python manage.py makemigrations

输出:

 No changes detected

下一个

python manage.py migrate

输出:

 Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying sessions.0001_initial... OK

确保在执行这些命令时您已将 Tutorial 与 TutorialSeries 链接起来。以这种方式完成工作的人会让您更早地从数据库中丢失数据。对此要小心。

祝你有美好的一天和快乐的编码。😁

原文由 Kush Singla 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏