Django-Oscar - Моделирование классов продуктов с 2 основными атрибутами, каждый из которых имеет различные податрибуты

Я работаю над созданием интернет-магазина для ювелирного бренда, используя Django-Oscar. У нас есть 6 типов продуктов (кольца, серьги и т.д.), каждый из которых определен как класс продукта.

Все эти классы продуктов имеют 2 общих типа атрибутов (Тип металла и Тип основного драгоценного камня), каждый из которых принимает набор значений. В зависимости от значений, которые они принимают (например, алмаз, рубин и т.д. для типа драгоценного камня), они имеют различные под-атрибуты (например, карат, чистота, происхождение и т.д. для алмаза). Также существуют атрибуты (например, Размеры, Вес и т.д.), которые являются общими для всех классов продуктов.

Для моделирования этих атрибутов я думаю настроить фреймворк Django-Oscar следующим образом:

  • Измените модель AbstractProduct так, чтобы она включала два поля: metal и primary-gemstone таким образом, чтобы каждый экземпляр продукта имел эти два поля

    .
  • Чтобы варьировать атрибуты в зависимости от выбора для metal и primary-gemstone, создайте две модели Metal и Gemstone, включающие возможные типы металлов и драгоценных камней в качестве полей

    .
  • Создайте модель MetalAttribute и модель GemstoneAttribute с полями metal, gemstone (PK из моделей Metal и Gemstone) и attribute-name (например, для типа драгоценного камня Diamond имена атрибутов могут быть carat, cut и т.д.)

  • Для возможных значений каждого атрибута для каждого металла/драгоценного камня нам понадобится модель с product, metal-type, gemstone-type, metal-attribute, gemstone-attribute, other-attribute (атрибуты, общие для всех классов продуктов, такие как Размеры, Вес и т.д. и созданные с помощью встроенной модели AbstractProductAttribute) и attribute-value полями.

Вопрос

Эффективен ли вышеуказанный подход? Существует ли другой способ моделирования вышеуказанных атрибутов без чрезмерной настройки фреймворка?

Я думал о следующих альтернативах, чтобы избежать настройки фреймворка но они, кажется, не отвечают моим требованиям:

  • Изменить определение классов продуктов, чтобы они включали тип продукта, металл и основной драгоценный камень (например, кольца-золото-сапфир), но у нас есть 6 типов продуктов, по крайней мере 3 типа металлов и по крайней мере 5 типов основных драгоценных камней, что подразумевает по крайней мере 90 классов продуктов, что кажется много

    .
  • Используйте 6 классов продуктов и модель AbstractAttributeOptionGroup для создания группы опций для каждого типа металла или драгоценного камня (например, Cut, Clarity, Origin для алмаза). Но тогда нам потребуется, чтобы эти "опции" имели значения, что, как мне кажется, невозможно в рамках данной структуры.

  • Определение классов продуктов с использованием типа металла и типа драгоценного камня (например, различные классы продуктов для золота, серебра, бриллианта, сапфира и т.д.) не будет работать, так как данный экземпляр продукта должен принадлежать к двум классам продуктов, один для типа металла, а другой для типа драгоценного камня, что в настоящее время невозможно в рамках фреймворка.

Вернуться на верх