编码库存系统,具有多态项和可管理的项类型

时间:2011-12-14 09:04:38

标签: django polymorphism

我们目前为员工提供库存系统。它包含 笔记本电脑,手机,还有符合人体工程学的椅子,冰箱或软件 许可证...管理员可以创建/读取/非常不同的东西 更新/删除。

完全基于管理界面完成版本后,我放弃了 因为它没有提供足够的灵活性。所以我卷了一个完整的 自定义版本,但我的口味有太多的代码...它是一个 要保持痛苦。

我遇到的一些问题包括:

  • 允许管理员通过添加他们自己的项类型 接口,例如:笔记本电脑,电视,...所以基本上就像他们可以通过界面创建一组属性的Django模型。项目类型也是分层的,例如电视 和Laptop是ElectronicItem的子类,而ElectronicItem又是一个 Item的子类,......

  • polymorphism:列出所有项目时,应该知道 它们是什么类型,这是为了搜索/过滤列表 javascript并生成项目详细视图的网址。

  • 通过Ajax更新一些属性,例如笔记本电脑有 许可证。在笔记本电脑的详细信息页面上,我有一个javascript“管理员” 将许可证关联/分离到该笔记本电脑。

所以我想知道是否有人建议使用什么!一世 特别想知道其中一个django CMSes应用程序可以帮助我, 因为这听起来像CMS可以提供​​的功能!我甚至想到了一个N​​OSql数据库......但这听起来像是复杂的解决方案。

实际上这不是我第一次面对Django的多态性问题,我还没有找到一个好的解决方案。所以我有点希望,他们是我完全错过的东西,有人可以向我展示光明!

2 个答案:

答案 0 :(得分: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

请注意,由于this issue,我必须调整一些内容才能使代码与select_related一起使用。

答案 1 :(得分:0)

好的......在撰写本文时,Django对此并不擅长。

像mongodb这样的无架构数据库是解决这个问题的好方法,而且Django根本不支持开箱即用。

所以我放弃了Django,用mongodb数据库重写了node.js中的所有内容。