Стоит ли создавать отдельные модели под отдельные категории товаров в Django?
Допустим у нас есть четыре категории товаров в интернет-магазине - Ручка, Пластилин, Бумага и Линейка.
Как стоит поступить - создать одну модель Товар или создать пять моделей Ручка, Пластилин, Бумага, Линейка и связать их с Товаром?
Минус первого варианта в том, что в Товар будут помещены все параметры четырех товаров, при этом, у некоторых товаров есть уникальные параметры (Бумага - размер, плотность бумаги, толщина, Линейка - длина, цена деления и т.д.) . Как итог - Товар будет очень нагруженным.
Минус второго варианта в том, что надо будет Ручку, Пластилин, Бумагу и Линейку связывать Один к Одному с Товаром, чтобы получить уникальные ID. Первый вариант лишен данного недостатка.
Как быть?
P.S. Я склоняюсь ко второму варианту, но очень хотел бы услышать мнения опытных людей. Если есть другие варианты - буду только рад)
Артём Иннокентьев: Признаки относятся к категории: У ручки "цвет", у бумаги "формат", например. А ЗначенияПризнаков относятся к конкретному экземпляру товара (уж если мы кириллицей пишем код):
Вы недавно в разработке. Ибо задача простая. Делайте сразу же масштабируемым магазин. Ибо завтра у вас добавится, ещё один тип товаров и вы полезете опять в код?
Создаётся три модели:
1. Категория
2. Товар
3. ХарактеристикиТовара
Товар имеет связь с категорией через ForeignKey и связь с характеристиками через ManyToManyField.
В итоге вы можете получить все товары выбранной категории и все характеристики товара(ов). В характеристиках заводите два поля "название" и "значение". Ну или разносите на две модели "название" и модель "значение". Во вторую ИД товара, ИД название и CharField значения. В итоге у вас может быть бесконечное количество "типов" товаров со своими персональными характеристиками.
Здравствуйте, я новичок в данной теме, честно я бы не писал если бы не потратил кучу часов своего времени на поиск ответов в гугле, или я гуглю плохо, или правда сложно найти материал по этой теме в рунете.
Подскажите пожалуйста, следуя вашему алгоритму, я должен создать для каждого товара свои характеристики а после эти характеристики должны наследоваться от класса ХарактеристикиТовара?
z00sharp, Я бы сделал модели:
1) Товар
2) Характеристика
3) Значение характеристики, с полями: ид_товара(ссылка на п1), ид_характеристики(ссылка на п2), значение.
В итоге можно потом и фильтры выводить по всем товарам в категории.
Фразу "создать одну модель Товар или создать пять моделей" следует читать как "создать одну модель Товар И создать пять моделей". в модели Товар добавить поле Тип и в него писать какой это тип товара. в зависимости от типа брать подчиненную таблицу о товаре.
а если свойства товара вынесете в отдельную таблицу и свяжите ее с моделью Товар и будете писать свойства по типу ключ-значение - будет вообще бомба :)