2011-12-14 4 views
1

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

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

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

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

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

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

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

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

ответ

0

Хорошо ... во время написания, Django просто не хорошо с этим.

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

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

3

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

Еще один отличный инструмент для управления наследованием и полиморфизмом - это проект Django model utils и 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, из-за this issue.

+0

Привет, я всегда испытывал искушение работать с наследованием в производство, но я никогда не осмеливался. На самом деле вам удобно с наследованием. Можете ли вы поделиться некоторым примером (по модели с наследованием и некоторыми моделями запросов: продукт, который представляет собой рубашку или куртку. Продукт с ценой> X и тип получения, ...). Большое спасибо! – danihp

+0

django-model-utils выглядит очень хорошо, я не знал об этом! Это решило бы проблему полиморфизма, но я не думаю, что это решило бы проблему «добавить свои собственные модели через интерфейс». Я посмотрю в Satchmo. – sebpiq

+0

@sebpiq Вы можете использовать [создание динамической модели] (https://code.djangoproject.com/wiki/DynamicModels) для динамического создания подклассов «Продукт» из данных, входящих в форму db. Но он начинает быть немного сложным :) –

Смежные вопросы