@artinnok
бекенд-программист

Стоит ли создавать отдельные модели под отдельные категории товаров в Django?

Допустим у нас есть четыре категории товаров в интернет-магазине - Ручка, Пластилин, Бумага и Линейка.

Как стоит поступить - создать одну модель Товар или создать пять моделей Ручка, Пластилин, Бумага, Линейка и связать их с Товаром?

Минус первого варианта в том, что в Товар будут помещены все параметры четырех товаров, при этом, у некоторых товаров есть уникальные параметры (Бумага - размер, плотность бумаги, толщина, Линейка - длина, цена деления и т.д.) . Как итог - Товар будет очень нагруженным.

Минус второго варианта в том, что надо будет Ручку, Пластилин, Бумагу и Линейку связывать Один к Одному с Товаром, чтобы получить уникальные ID. Первый вариант лишен данного недостатка.

Как быть?

P.S. Я склоняюсь ко второму варианту, но очень хотел бы услышать мнения опытных людей. Если есть другие варианты - буду только рад)
  • Вопрос задан
  • 1974 просмотра
Решения вопроса 2
@nirvimel
Во-первых: однозначно, одна таблица для товаров.
Во-вторых: специфичные для конкретных категорий, признаки задаются следующим образом.
1. таблица Категории.
2. таблица ПризнакиКатегорий.
    - внешний ключ к Категории;
3. таблица ЗначенияПризнаков.
    - внешний ключ к ПризнакиКатегорий;
    - внешний ключ к Товыры;
Ответ написан
syschel
@syschel
freelance/python/django/backend
Вы недавно в разработке. Ибо задача простая. Делайте сразу же масштабируемым магазин. Ибо завтра у вас добавится, ещё один тип товаров и вы полезете опять в код?
Создаётся три модели:
1. Категория
2. Товар
3. ХарактеристикиТовара

Товар имеет связь с категорией через ForeignKey и связь с характеристиками через ManyToManyField.
В итоге вы можете получить все товары выбранной категории и все характеристики товара(ов). В характеристиках заводите два поля "название" и "значение". Ну или разносите на две модели "название" и модель "значение". Во вторую ИД товара, ИД название и CharField значения. В итоге у вас может быть бесконечное количество "типов" товаров со своими персональными характеристиками.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Фразу "создать одну модель Товар или создать пять моделей" следует читать как "создать одну модель Товар И создать пять моделей". в модели Товар добавить поле Тип и в него писать какой это тип товара. в зависимости от типа брать подчиненную таблицу о товаре.
а если свойства товара вынесете в отдельную таблицу и свяжите ее с моделью Товар и будете писать свойства по типу ключ-значение - будет вообще бомба :)

вобщем, кому как нравится тот так и делает :)
Ответ написан
Комментировать
@denizen
Для таких задач уже существуют готовые модули. Посмотите, например, этот.
Ответ написан
Комментировать
@MAGistr_MTM
Учусь программировать
Такое реализировано уже в Django-Oscar:model.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы