django.db.utils.IntegrityError: - PullRequest
1 голос
/ 30 мая 2019

django.db.utils.IntegrityError: строка в таблице 'main_tutorial' с первичным ключом '1' имеет недопустимый внешний ключ: 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

1 Ответ

0 голосов
/ 30 мая 2019

В вашей модели Tutorial вы используете значение по умолчанию для поля внешнего ключа ** tutorial_series **. Это заставляет миграцию проверить, существует ли запись в TutorialSeries с id=1, но таких данных нет, поэтому возникает ошибка.

Чтобы избежать ошибки при переносе, удалите on_delete=models.SET_DEFAULT и default=1 из наших полей, чтобы сделать ваши модели такими:

class TutorialSeries(models.Model):
    tutorial_series = models.CharField(max_length=200)
    tutorial_category = models.ForeignKey(TutorialCategory,verbose_name="Category")
    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, verbose_name="Series", blank=True, null=True) #<--changes
        tutorial_slug = models.CharField(max_length=200,default=1)

        def __str__(self):
            return self.tutorial_title

После этого перенесите ваши модели. Затем добавьте данные в TutorialCategory и TutorialSeries с id=1.

Затем верните ваши модели к первоначальной настройке (с настройками по умолчанию = 1 и on_delete = models.SET_DEFAULT) . Затем снова запустите makemigrations и перенесите ваши модели. После этого ваша проблема может быть решена.

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