Правильный способ для вложенных python классов (или django внешних ключей.) * Концептуальный / технический вопрос * - PullRequest
1 голос
/ 01 мая 2020

Это скорее концептуальный / инженерный вопрос, нежели актуальный вопрос программирования, но я продолжаю идти вперед и назад между тем, что «правильно» делать здесь. Для быстрого ознакомления, я все еще немного новичок в python / django и не имею большого опыта работы с классами.

Программа, которую я пытаюсь разработать, - это приложение для управления запасами. .

Существует несколько продуктов, но давайте упростим и скажем, что один - это обувь, а другой - одежда. Оба продукта имеют некоторые атрибуты (UP C, размер, цвет и т. Д. 1034 *), но также имеют некоторые уникальные атрибуты (shoe_width, clothing_type).

Кроме того, похоже, что у меня должен быть отдельный класс Product (уникальные атрибуты продукта UP C, size shoe_width, clothing_type) и класс InventoryItem (атрибуты, уникальные для каждой единицы инвентаря, такие как уплаченная цена или состояние) который наследует соответствующие атрибуты класса Product.

EDIT2: clothing_type уникален для одежды, но shoe_width должен быть уникальным для фактического предмета обуви InventoryItem, а не для предмета обуви. Этот вид усложняет вопрос, так как теперь я думаю, что мне понадобятся не только отдельные классы одежды и обуви, но также классы ClothingInventoryItem и ShoeInventoryItem для работы с уникальными полями на уровне инвентаря.

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

Итак, на самом деле, что это за вопрос? правильный способ реализации отдельных классов, и каковы некоторые из проблем, с которыми я могу столкнуться или недостатки в этом? У меня возникла проблема с визуализацией, как это будет работать.

Должен ли я:

A)

  • Есть поле ProductType (сделать две начальные записи для "Shoe") "&" Clothing ")
  • Имеют отдельные классы" Shoe "и" Clothing ", которые наследуют ProductType через models.ForeignKey (ProductType). Тогда у них будут свои уникальные поля, независимо от того, имеют ли они общие поля.
  • Имейте класс InventoryItem, который затем наследует Shoe или Clothing через ForeignKey.

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

Заранее спасибо.

Редактировать: Когда Первоначально я набирал это, альтернативный сценарий состоял бы в том, чтобы правильно выполнить эти отношения через python вложенные классы, а затем передать информацию в django классовые модели ... но это кажется избыточным и ненужным.

...