Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在简单的电子商务数据库中创建OrderItem或将LineItem链接到订单?_Python_Django_Django Rest Framework_Backend - Fatal编程技术网

Python 在简单的电子商务数据库中创建OrderItem或将LineItem链接到订单?

Python 在简单的电子商务数据库中创建OrderItem或将LineItem链接到订单?,python,django,django-rest-framework,backend,Python,Django,Django Rest Framework,Backend,我正在使用django rest框架从头开始构建自己的电子商务系统 以下是对我的系统架构的描述: Db format=PostgresSQL 一个账户有许多行项目(又称CartItems) 一个行项目有一个帐户(FK),一个产品(FK) 一个账户有多个订单 行项目字段: 账户FK 产品FK 数量 价格(用于将产品型号指定的任何折扣(范围0-1)考虑在内的序列化器方法字段) 我的问题在于帐户是否能够创建订单 到目前为止,我已经确定了两种方法: 1) 通过添加以下字段修改行项目模型: Is

我正在使用django rest框架从头开始构建自己的电子商务系统

以下是对我的系统架构的描述:

Db format=PostgresSQL

一个账户有许多行项目(又称CartItems)

一个行项目有一个帐户(FK),一个产品(FK)

一个账户有多个订单


行项目字段:

  • 账户FK
  • 产品FK
  • 数量
  • 价格(用于将产品型号指定的任何折扣(范围0-1)考虑在内的序列化器方法字段)

我的问题在于帐户是否能够创建订单

到目前为止,我已经确定了两种方法:

1) 通过添加以下字段修改行项目模型:

  • IsMountedForOrder(用于立即购买)-布尔字段
  • 订单(外键)
约束:LineItems模型因外键和关系而变得负担过重-从数据库管理的角度来看,这似乎是一个障碍。如果我错了,请纠正我

2) 创建订单项模型(一个订单有多个订单项)

字段:

  • 订单FK
  • 产品FK(从自有行项目解析)
  • 数量(从拥有的行项目中解析)
  • 价格(从自有行项目解析)
成功创建订单后,将删除行项目

限制条件:数据在短时间内重复,似乎是不必要的计算,因此增加了服务的延迟

如能就如何实现高效订单创建方法提出建议,我将不胜感激。
要么修改这两种方法,要么找出我可能忽略的架构缺陷。谢谢大家!

根据您的电子商务系统的复杂程度,我的设计目标与此类似:

1. Account
2. Order { account_id, total, tax, address, etc}
3. OrderLine { order_id, product_id, price, discount, quantity_ordered, quantity_fulfilled, etc}
4. Cart { account_id, subtotal, tax, coupons, is_abandoned, address, etc}
5. CartLine { cart_id, product_id, price, discount, quantity, etc}
通常,在下订单之前,您不希望创建订单行。如果要在服务器上存储购物车信息,请创建一个单独的表来维护这些信息

用户将项目添加到购物车后,更新购物车/购物车行。在他们进行结帐并完成付款后,获取购物车(+CartLine)对象并从中创建订单(+OrderLine)

如果您想将这种复杂性降低一点,我建议不要将购物车信息存储在表中,只需使用
request.session
存储购物车信息即可

当用户完成订单时,将购物车转换为订单+订单行

如果你想要更多的自由(增加了复杂性),而不是购物车+购物车,我会使用Checkout+CheckoutLine表来存储更多的信息,而不仅仅是购物车信息(比如客户在结账过程中达到的步骤、付款信息等)


根据我对你问题的理解,我希望能回答你的一些问题。

这是主题中的一个问题,正文中有许多问题。回答这个问题:FK仅受数据库的限制,因此可以添加任意数量的FK。每个表的insert/update都会对性能造成影响,但小型表不会出现问题。我注意到了问题格式中的缺陷(我是新来的),并进行了相应的编辑。谢谢你的回答!:)这绝对有帮助,谢谢你抽出时间写这篇文章!实际上,我最终使用了类似于checkout+checkoutLine功能的东西——创建了订单模型与lineItem模型的关联,并进行了状态更新。这稍微增加了复杂性,但值得权衡,因为它简化了系统,并且能够在时机成熟时有效地扩展!非常感谢你的帮助!Cheers@Rishi苏拉那我很高兴能帮上忙。如果这对您有所帮助,如果您能选择此作为答案并结束问题,我将不胜感激:)