【问题标题】:Coding an inventory system, with polymorphic items and manageable item types使用多态物品和可管理的物品类型编写库存系统
【发布时间】:2012-01-20 01:41:40
【问题描述】:

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

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

我遇到的一些问题包括:

  • 允许管理员通过 接口,例如:笔记本电脑,电视,......所以基本上就像他们可以通过接口创建具有一组属性的 Django 模型一样。项目类型也是分层的,例如电视 和膝上型计算机是 ElectronicItem 的子类,而后者又是 Item 的子类,...

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

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

所以我想知道是否有人对使用什么有建议!一世 特别想知道其中一个 django CMSes 应用程序是否可以帮助我, 因为这听起来确实像 CMS 可以提供的功能!我什至在考虑一个 NOSql 数据库……但这些听起来像是复杂的解决方案。

其实我也不是第一次遇到Django这个多态问题了,到现在还没有找到好的解决办法。所以我有点希望,他们是我完全错过的东西,有人可以给我指路!!!

【问题讨论】:

    标签: django polymorphism


    【解决方案1】:

    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 一起使用。

    【讨论】:

    • 嗨,我一直很想将继承引入生产,但我从来不敢。你真的对继承感到满意。您能否分享一些示例(关于具有继承的模型和一些通过模型进行查询的模型:衬衫或夹克的产品。价格 > X 的产品并获取类型,...)。非常感谢!
    • django-model-utils 看起来很不错,我不知道!它会解决多态性问题,但我认为它不会解决“通过接口添加自己的模型”问题。我会调查一下 Satchmo。
    • @sebpiq 您可以使用 dynamic model creation 从来自 db 的数据动态创建 Product 子类。但它开始有点复杂了:)
    • yeeaah ...确实感觉很hackish :)而且我不敢相信我是第一个遇到这个问题的人...实际上我现在正在寻找一个完整的自定义解决方案像腌制的字段和使用正则表达式的过滤器,但我也不确定这是否好!
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多