Уточнение архитектуры для приложения Warehouse Django
все,
Я начал реализовывать свой следующий проект под названием Warehouse :) И на самом деле, я снова застрял. Наверное, я все слишком усложнил и не знаю, как из этого выбраться. Итак, основные предположения по применению Warehouse:
- У нас есть несколько товаров
- Вы принимаете товар на склад - заказ состоит из нескольких продуктов. Вы должны знать закупочную цену и количество для каждого из них.
- Некоторая модель, которая будет хранить информацию о текущем состоянии склада. Полагаю, это будет Singleton? .
- Вы продаете продукцию со склада - заказ состоит из цены продажи продукции, количества продукции .
Ок, мне кажется, что все вышеперечисленное является основными предположениями, ниже я написал то, что нужно для достижения цели, но я уверен, что это не работает так, как задумано.
Буду очень благодарен за любые советы, подсказки и разъяснения по архитектуре.
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}"