Логика заказа и OrderItem

Я работаю над проектом управления запасами для склада, продающего товары оптом.

Мне трудно разобраться с логикой для моих заказов (тупой я). На данный момент у меня есть модель Order и модель OrderItem, основная идея заключается в том, что один заказ может содержать несколько товаров с ценой по умолчанию или пользовательской ценой.

Вот моя модель Order

class Order(models.Model):
    creation_date = models.DateTimeField(auto_now_add=True)
    customer = models.ForeignKey(Customer, on_delete=models.CASCADE)
    paid_amount = models.IntegerField(default=0)

    def __str__(self):
        return f'{self.creation_date.strftime("%Y%m%d")} - {self.customer.full_name}'

    def get_absolute_url(self):
        return reverse('order-detail', kwargs={'pk': self.pk})
    
    @property
    def is_fully_paid(self):
        # Couldn't figure out how to write the rest.

Вот моя модель OrderItem

class OrderItem(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    order = models.ForeignKey(Order, on_delete=models.CASCADE)
    quantity = models.IntegerField(default=1)
    custom_single_product_price = models.IntegerField(blank=True, null=True)

    def __str__(self):
        return f'{self.creation_date.strftime("%Y%m%d")} - {self.customer.full_name} - {self.product.title}'

Вот моя модель Продукта

class Product(models.Model):
    creation_date = models.DateTimeField(auto_now_add=True)
    title = models.CharField(max_length=128)
    sku = models.CharField(max_length=30, blank=True, null=True)
    photo = models.ImageField(upload_to='product_photos/', blank=True, null=True)
    number_of_boxes = models.IntegerField(default=1)
    number_of_products_per_box = models.IntegerField(default=1)
    single_product_price = models.IntegerField(default=1000)

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('product-detail', kwargs={'pk': self.pk})

у товара уже есть цена single_product_price, которая должна использоваться в качестве цены по умолчанию при оформлении заказа, однако менеджеры на складе могут изменить эту цену по умолчанию на другую, если захотят.

Здравая ли моя нынешняя логика?

Также, как мне отметить, полностью ли оплачен заказ или нет?

Вернуться на верх