Я использую django-oscar и разветвил некоторые приложения для использования пользовательской модели.
В частности, с моделью каталога.По умолчанию есть продукты, типы продуктов и категории продуктов.Я пытаюсь расширить модель, чтобы иметь таблицу коллекций и привязать каждый продукт к коллекции.
Я хочу установить связь таким образом, чтобы при удалении коллекции удалялись все связанные продукты, но чтобы при удалении продукта коллекция не удалялась.
Помимо добавления новой таблицы коллекцииЯ расширяю таблицу продуктов, чтобы иметь поле множителя (которое будет содержать целое число, используемое для умножения оптовой цены ..., если есть лучший способ сделать это, пожалуйста, сообщите) и внешний ключ к таблице коллекций.
Насколько я понимаю, все выглядит хорошо.Это мой models.py из приложения разветвленного каталога:
from django.db import models
class Collection(models.Model):
name = models.CharField(max_length=50)
prod_category = models.CharField(max_length=50)
description = models.TextField()
manufacturer = models.TextField()
num_products = models.IntegerField()
image_url = models.URLField()
from oscar.apps.catalogue.abstract_models import AbstractProduct
class Product(AbstractProduct):
collection = models.ForeignKey(Collection, on_delete=models.CASCADE)
multiplier = models.DecimalField(max_digits=2, decimal_places=1)
from oscar.apps.catalogue.models import *
Когда я делаю миграцию через manage.py, после запроса значений по умолчанию (что я рассмотрю позже), это нормально.
Однако при выполнении миграции я получаю следующее сообщение об ошибке:
Running migrations:
Applying catalogue.0014_auto_20181211_1617...Traceback (most recent call last):
File "/home/mysite/lib/python3.7/Django-2.1.3-py3.7.egg/django/db/backends/utils.py", line 85, in _execute
return self.cursor.execute(sql, params)
psycopg2.IntegrityError: insert or update on table "catalogue_product" violates foreign key constraint "catalogue_product_collection_id_e8789e0b_fk_catalogue"
DETAIL: Key (collection_id)=(1) is not present in table "catalogue_collection".
Это потому, что мне нужно добавить поле collection_id?