Кодирование системы инвентаризации, с полиморфными элементами и управляемыми типами элементов - PullRequest
1 голос
/ 14 декабря 2011

В настоящее время у нас есть система инвентаризации для наших сотрудников. Это содержит ноутбуки, телефоны, а также эргономичные кресла, холодильники или программное обеспечение лицензии ... Так что очень разные вещи, которые администраторы могут создавать / читать / обновление / удаление.

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

Некоторые из проблем, с которыми я столкнулся, включают:

  • , позволяющий администраторам добавлять свои собственные типы элементов через интерфейс, например : ноутбук, телевизор, ... так что, в принципе, они могли бы создавать модели Django с помощью набора атрибутов через интерфейс. Также типы элементов являются иерархическими, например ТВ и ноутбук являются подклассами ElectronicItem, который, в свою очередь, является подкласс Item, ...

  • полиморфизм: при перечислении всех предметов они должны знать какого они типа, это для поиска / фильтрации списка с javascript, а также генерирует URL для подробного представления элемента.

  • обновление некоторых атрибутов через Ajax, например ноутбуки имеют лицензии. На странице сведений о ноутбуке у меня есть javascript "менеджер", чтобы привязать / отсоединить лицензии к этому ноутбуку.

Так что мне было интересно, есть ли у кого-нибудь предложение о том, что использовать! я особенно интересно, может ли мне помочь одно из приложений django CMSes, потому что это похоже на функциональность, которую может обеспечить CMS! Я даже думал о базе данных NOSql ... но это звучит как сложные решения.

На самом деле это не первый раз, когда я сталкиваюсь с этой проблемой полиморфизма с Джанго, и я до сих пор не нашел хорошего решения. Так что я надеюсь, что это то, чего я полностью упустил, и что кто-то может показать мне свет !!!

Ответы [ 2 ]

3 голосов
/ 14 декабря 2011

Проект Satchmo - это решение для электронной коммерции на основе django, которое позволяет управлять различными продуктами и различными опциями для определенных продуктов.Возможно, вы могли бы найти там вдохновение.

Еще один замечательный инструмент для управления наследованием и полиморфизмом - это модель Django, использующая проект , и InheritanceManager, который он предоставляет.Я использую в производстве, чтобы управлять различными видами продуктов (рубашки, куртки и т. Д.), И это действительно полезно.

** Редактировать **

По запросу, примернаследования.

class Product(models.Model):
    objects = InheritanceManager()
    client = models.ForeignKey('clients.Client')
    price = models.PositiveIntegerField()


class Shirt(Product):
    color = …

class Pants(Product):
    …

products = Product.objects.all().select_subclasses()
# products[0] can be a Shirt, and products[1] can be a Pants

Обратите внимание, что мне пришлось настроить несколько вещей, чтобы код работал с select_related, из-за этой проблемы .

0 голосов
/ 08 февраля 2013

Ладно ... на момент написания статьи, Джанго не очень хорошо с этим справился.

Базы данных без схемы, такие как mongodb, являются хорошим решением этой проблемы, и Django просто не поддерживает их из коробки.

Поэтому я отказался от Django и переписал все это в node.js с помощью базы данных mongodb.

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