IntegrityError主键无效

时间:2019-07-28 01:33:24

标签: python django

我正在按照senddex的django Web开发教程进行操作,但是我碰壁了-错误显示:

  

django.db.utils.IntegrityError:表'main_tutorial'中具有主键'1'的行具有无效的外键:main_tutorial.tutorial_series_id包含的值'1'在main_tutorialseries.id中没有相应的值

我尝试删除default=1on_delete=models.SET_DEFAULT/CASCADE

我也尝试删除SQL数据库迁移。 我已经尝试过使用SQ Browser的SQ Browser尝试进行更改。

可悲的是,我已经花了数小时盯着这个,试图寻找答案,我们将不胜感激。谢谢! 代码是:

from django.db import models
from datetime import datetime


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, default=1)
    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 Seriess 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')

    tutorial_series = models.ForeignKey(TutorialSeries, default=1, verbose_name="Series", on_delete=models.SET_DEFAULT)
    tutorial_slug = models.CharField(max_length=200)
    def __str__(self):
        return self.tutorial_title

任何帮助我克服这一障碍的细节将不胜感激。谢谢!

3 个答案:

答案 0 :(得分:0)

删除A TD Count_Less Count_More 100 0 3 2 100 1 3 2 100 2 4 1 . . . 103 0 0 5 103 1 1 4 . . . ,然后在字段import org.junit.runners.Parameterized.Parameters; import org.testng.annotations.Parameters; 中将default=1更改为models.SET_DEFAULT

models.CASCADE

tutorial_series

答案 1 :(得分:0)

Tutorial中的第一行(通过FK)与TutorialSeries中不存在的行相关联。即错误数据。关于如何解决此问题,您有一些选择:

  1. 可能是您收到此错误,因为TutorialSeries中没有数据。因此,一种选择是删除表Tutorial上ID为1的行。这是一个简单的解决方案。

  2. 也许您在TutorialSeries中删除了FK行,在这种情况下,请将其重新添加。只需确保其ID为1,即可将PK与之关联。这可能也是一个简单的选择,尤其是在TutorialSeries中没有其他数据的情况下。

  3. 也许TutorialSeries中有数据,但没有任何具有相应FK行ID的数据。因此,另一个选择是将PK指向TutorialSeries中的另一行。换句话说,编辑不良数据。

  4. 删除迁移。更改FK默认值,然后重新进行makemigration和迁移。

答案 2 :(得分:0)

在您的字段中删除默认值 = 1 并将 models.SET_DEFAULT 更改为 models.CASCADE 就像评论中提到的 sachin mathew

然后尝试重置您的 Django 数据库 视频:-refvideo