Как установить связь между таблицами "Продажи продукции" и "Затраты на продукцию" в Django
Возможно, это элементарный вопрос, но мне нужна помощь, как установить отношения между моими моделями.
- У меня есть первая модель SalesData, в которую я импортирую из csv данные о продажах продуктов за определенные периоды - таким образом, эта таблица может содержать продукт несколько раз с разными датами, количеством и продажами:
class SalesData(models.Model):
date = models.DateField("Date", null=True, blank=True)
product = models.CharField("Product", max_length=150, null=True, blank=True)
sales = models.DecimalField("Sales", max_digits=10, decimal_places=2, null=True, blank=True)
quantity = models.IntegerField("Quantity", null=True, blank=True)
- У меня есть вторая модель ProductCosts, где у меня есть продукт и его производственные затраты. И один продукт может иметь только одну конкретную производственную стоимость.
class ProductCosts(models.Model):
product = models.CharField("Product", max_length=150)
costs = models.DecimalField("Costs", max_digits=10, decimal_places=2)
А мне нужна помощь:
- как связать эти две таблицы, чтобы иметь возможность получить производственные затраты на конкретный продукт для каждой строки в таблице SalesData, чтобы я мог рассчитать прибыль, маржу и т.д. для конкретных строк?
- что нужно сделать, чтобы иметь возможность создать форму, где я могу заполнить производственные затраты для строк, где эти затраты отсутствуют для новых данных о продажах, введенных в таблицу? И если можно, чтобы форма была в виде таблицы с продуктами с отсутствующими затратами в первом столбце, а во втором столбце были пустые поля для отсутствующих затрат на производство и чтобы можно было заполнить и сохранить все отсутствующие затраты в таблице ProductCosts, если это как-то возможно?
Я бы предложил вам создать отдельную модель для продукта и установить связь по внешнему ключу между данными о продажах и затратах на производство и этой моделью. Например, так
class Product(models.Model):
name = models.CharField(max_length=100)
class SalesData(models.Model):
date = models.DateField("Date", null=True, blank=True)
product = models.ForeignKey(Product, on_delete=models.CASCADE)
sales = models.DecimalField("Sales", max_digits=10, decimal_places=2, null=True, blank=True)
quantity = models.IntegerField("Quantity", null=True, blank=True)
class ProductCosts(models.Model):
product = models.OneToOneField(Product, on_delete=models.CASCADE)
costs = models.DecimalField("Costs", max_digits=10, decimal_places=2)
Теперь ваши две таблицы связаны через таблицу Product.
Для расчета прибыли по каждой строке вы можете использовать annotate. Вы можете изменить формулу в соответствии с вашими потребностями.
from django.db.models import F
SalesData.objects.annotate(profit=(F('sales')-F('product__productcosts__costs')))
Для создания формы вы можете зарегистрировать свои модели в django admin и редактировать их там. Есть также возможность редактировать их в списке.