首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >django建模

django建模
EN

Stack Overflow用户
提问于 2010-06-10 05:01:31
回答 1查看 94关注 0票数 0

概念:

饮料是由成分组成的。例如10毫升的伏特加。在一些收据中,成分是非常特殊的(10毫升芬兰迪亚伏特加),有些则不是(10毫升任何伏特加)。

我想知道如何建模一个组件来解决这个问题--我有特定的产品,可以满足更多的需求。

目前的模型是:

代码语言:javascript
运行
复制
class Receipt(models.Model):
  name = models.CharField(max_length=128)
  (...)
  components = models.ManyToManyField(Product, through='ReceiptComponent')

  def __unicode__(self):
    return self.name

class ReceiptComponent(models.Model):
  product = models.ForeignKey(Product)
  receipt = models.ForeignKey(Receipt)
  quantity = models.FloatField(max_length=9)
  unit = models.ForeignKey(Unit)
  class Admin:
    pass
  def __unicode__(self):
    return unicode(self.quantity!=0 and self.quantity or '') + ' ' + unicode(self.unit) + ' ' + self.product.genitive

class Product(models.Model):
  name = models.CharField(max_length = 128)
  (...)
  class Admin:
    pass
  def __unicode__(self):
    return self.name

class Stock(Store):
  products = models.ManyToManyField(Product)
  class Admin:
    pass
  def __unicode__(self):
    return self.name

我考虑制作一些表格,将真实产品(现货)和抽象产品(接收组件)连接起来。但也许有一个简单的解决方案?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-06-10 05:42:15

我想我会采用一种更复杂的方法,使用树形结构,其中Product对象处于层次结构中。可能有一个名为“酒精”的节点,它的子节点是“伏特加”、“威士忌”、“啤酒”。“伏特加”有子节点“芬兰伏特加”和“俄罗斯伏特加”

如果没有“完成伏特加”库存,首先检查其所有子节点(“绝对伏特加”,...),然后遍历其兄弟节点(“俄罗斯伏特加”),然后遍历其父节点(按相反顺序)(“伏特加”,“酒精”),直到找到一个库存。num_in_stock将是产品表中的整型字段。

在谷歌代码http://code.google.com/p/django-mptt/上有一个著名的很棒的应用程序,叫做mptt (修改的预排序树遍历),它对django中的树很好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3009913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档