Django Значение ForeignKey не имеет соответствующего значения - PullRequest
0 голосов
/ 12 апреля 2020

Я работаю над секцией Django CS50 около 30-минутной отметки на видео с разделом режимов «ForeignKey».

Когда я запускаю make-миграцию, я получаю сообщение об ошибке.

Вы пытаетесь добавить ненулевое поле «агент» к продукту без значения по умолчанию; мы не можем этого сделать (базе данных нужно что-то для заполнения существующих строк).

Пожалуйста, выберите исправление:

1) Укажите одноразовое значение по умолчанию сейчас (будет установлено для всех существующих строки с нулевым значением для этого столбца)

2) Выйдите и позвольте мне добавить значение по умолчанию в models.py

Выберите параметр: 2

, если я установлю по умолчанию в виде строкового значения я получаю сообщение об ошибке, говоря, что ожидал идентификатор.

Если я установил его как 1, то получу следующее.

Строка в таблице 'clutter_product' с первичным ключом «1» имеет недопустимый внешний ключ: clutter_product.agent_id содержит значение «1», которое не имеет соответствующего значения в clutter_supplier.id.

class Supplier(models.Model):
company = models.CharField(max_length=64)
contact = models.CharField(max_length=64)
email = models.CharField(max_length=128, blank = True)

def __str__(self):
    return f"{self.id} {self.company} {self.contact} {self.email}"

class Product(models.Model):
    name = models.CharField(max_length=64)
    sku = models.CharField(max_length=64, blank = True)
    unit_cost = models.IntegerField()
    rrp = models.IntegerField()
    average_fee = models.IntegerField()
    shipping_fee = models.IntegerField()
    agent = models.ForeignKey(Supplier, default=1, on_delete=models.CASCADE, related_name="suppliers")

1 Ответ

1 голос
/ 12 апреля 2020

Я бы предложил выполнить следующие действия:

Сначала , удалите файл миграции, который вызывает эту проблему.

Второй измените Вот такая модель:

class Product(models.Model):
    # rest of the fields
    agent = models.ForeignKey(Supplier, null=True, default=None, on_delete=models.CASCADE, related_name="suppliers")

Третий Запустите makemigrations и мигрируйте.

Четвертый создайте экземпляр поставщика, используя supplier = Supplier.objects.create(company="ABC", contact="contact", email="a@b.c", pk=1)

Пятое (необязательно) Обновите существующий Продукт, чтобы иметь поставщика- Product.objects.update(agent=supplier).

Шестое , если вы хотите ограничить Продукты, которые будут созданы с помощью агент, затем удалите null=True, default=None из поля agent в модели Product. Затем запустите makemigrations и мигрируйте.

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