Приложение django-oscar с пользовательской моделью не может мигрировать - PullRequest
0 голосов
/ 14 декабря 2018

Я использую 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?

1 Ответ

0 голосов
/ 15 декабря 2018

Проблема в том, что вы указали значение по умолчанию, которое не существует.Я предполагаю, что когда вас попросили указать значения по умолчанию для миграции, вы ввели 1 для коллекции.Проблема в том, что в базе данных нет объекта Collection с таким идентификатором, поэтому миграция завершается неудачей.

Вам также необходимо:

  1. СоздатьCollection объект с идентификатором по умолчанию, который вы указали перед попыткой добавить переопределенную модель продукта.

  2. Сделайте внешний ключ для Collection обнуляемым, так что вам не нужнозначение по умолчанию.

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