Джанго моделирование - PullRequest
0 голосов
/ 10 июня 2010

Концепция:

Напитки изготовлены из компонентов.Например, 10 мл водки.В некоторых квитанциях компонент очень специфичен (10 мл финляндской водки), а некоторые нет (10 мл любой водки).

Интересно, как смоделировать компонент для решения этой проблемы - на складе у меня есть конкретный продукт,который может удовлетворить больше требований.

Модель на данный момент:

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

Я думаю о создании некоторой таблицы, которая объединяет реальный продукт (на складе) с абстрактным продуктом (компонентом получения).Но, может быть, есть простое решение?

1 Ответ

1 голос
/ 10 июня 2010

Я думаю, что я бы пошел с еще более сложным подходом, используя древовидную структуру, где объекты Product находятся в иерархии.Там может быть узел под названием «алкоголь» с дочерними узлами «водка», «виски», «пиво».А у «водки» есть дочерние узлы «Финская водка» и «Русская водка»

Если на складе нет «Готовой водки», сначала проверьте все ее дочерние элементы («Абсолютная водка», ...), затемпройти его братьев и сестер ("русская водка"), а затем его родительские узлы (в обратном порядке) ("водка", "алкоголь"), пока не будет найден один на складе.num_in_stock будет целочисленным полем в таблице продуктов.

Существует хорошо известное и отличное рабочее приложение под названием mptt (измененный предзаказ обхода дерева) в коде Google http://code.google.com/p/django-mptt/, которое отлично подходит для деревьевв Джанго.

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