line_items
- это словарь продуктов и количество экземпляров этого продукта.
Я бы предложил , а не , чтобы сохранить это в словаре. В реляционной базе данных обычно хранится это в другой таблице для нескольких записей. Преимущество этого в том, что он легко запрашивает . Например, для создания списка всех заказов, которые содержат определенный продукт или содержат определенный продукт с количеством, превышающим 50.
Таким образом, у нас обычно есть три таблицы:
+-------+ 1 N +--------------+ N 1 +---------+
| Order |----------| OrderProduct |----------| Product |
+-------+ +--------------+ +---------+
| email | | quantity |
+-------+ +--------------+
Таким образом, у нас есть три модели: Order
, OrderProduct
и Product
, например:
Order(models.Model):
email = models.EmailField()
Product(models.Model):
# ...
pass
OrderProduct(models.Model):
order = models.ForeignKey(Order, on_delete=models.CASCADE)
product = models.ForeignKey(Product, on_delete=models.CASCADE)
quantity = models.IntegerField(default=1)
class Meta:
unique_together = ('order', 'product')
Таким образом, мы можем построить заказ как:
product1 = Product.objects.create()
product2 = Product.objects.create()
my_order = Order.objects.create(email='foo@bar.com')
OrderProduct.objects.create(product=product1, order=my_order)
OrderProduct.objects.create(product=product2, order=my_order, quantity=14)
Итак, здесь мы сконструировали два продукта и один заказ и добавили к этому заказу два OrderProduct
, один для product1
и один для product2
с количеством 14
.