Уточнение архитектуры для приложения Warehouse Django

все,

Я начал реализовывать свой следующий проект под названием Warehouse :) И на самом деле, я снова застрял. Наверное, я все слишком усложнил и не знаю, как из этого выбраться. Итак, основные предположения по применению Warehouse:

  1. У нас есть несколько товаров
  2. Вы принимаете товар на склад - заказ состоит из нескольких продуктов. Вы должны знать закупочную цену и количество для каждого из них.
  3. Некоторая модель, которая будет хранить информацию о текущем состоянии склада. Полагаю, это будет Singleton?
  4. .
  5. Вы продаете продукцию со склада - заказ состоит из цены продажи продукции, количества продукции
  6. .

Ок, мне кажется, что все вышеперечисленное является основными предположениями, ниже я написал то, что нужно для достижения цели, но я уверен, что это не работает так, как задумано.

Буду очень благодарен за любые советы, подсказки и разъяснения по архитектуре.

class OrderIn(models.Model):
    # Standard fields
    last_updated = models.DateTimeField(auto_now=True, editable=False)
    ordered = models.DateField(auto_now_add=True, editable=True)
    received = models.DateField(auto_now_add=True, editable=True)


class OrderOut(models.Model):
    # completed = models.BooleanField(default=False)
    # Standard fields
    last_updated = models.DateTimeField(auto_now=True, editable=False)
    ordered = models.DateTimeField(auto_now_add=True, editable=True)


class MiddleOrder(models.Model):
    order_in = models.ForeignKey(OrderIn, on_delete=models.CASCADE, blank=True, null=True)
    order_out = models.ForeignKey(OrderOut, on_delete=models.CASCADE, blank=True, null=True)

    def save(self, *args, **kwargs):
        super(MiddleOrder, self).save(*args, **kwargs)
        if self.order_in and self.order_out:
            raise Exception("You can set only one order type") # noqa


class ProductOrder(models.Model):
    price = models.DecimalField(default=0.00, max_digits=10, decimal_places=2)
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    qty = models.IntegerField(default=1)
    order_type = models.ForeignKey(MiddleOrder, on_delete=models.DO_NOTHING)

    # Standard fields
    last_updated = models.DateTimeField(auto_now=True, editable=False)

    def __str__(self):
        return f"{self.product.name} {self.qty}"
Вернуться на верх