【发布时间】:2021-09-15 06:23:25
【问题描述】:
所以我有 4 个模型
class User(models.Model):
userID = models.CharField(pk = True)
......
class Producer(models.Model):
userID = models.OneToOneField('Users.User',on_delete=CASCADE,primary_key=True)
.....
class Buyer(models.Model):
userID = models.OneToOneField('Users.User',on_delete=CASCADE,primary_key=True)
.....
class Inventory(models.Model):
item_id = models.UUIDField(primary_key=True,auto_created=True,default=uuid.uuid4)
producerID = models.ForeignKey('Producers.Producer',on_delete=CASCADE)
.....
class Cart(models.Model):
userID = models.OneToOneField(Buyer, on_delete = CASCADE,primary_key = True)
last_updated = models.DateTimeField(auto_now = True)
class Cart_Item(models.Model):
cart_item_id = models.UUIDField(primary_key=True,auto_created=True,default= uuid.uuid4)
item_id = models.ForeignKey('Inventory.Inventory', on_delete= SET_NULL,null=True)
userID = models.ForeignKey(Cart,on_delete=CASCADE)
......
然后我有一个 post-only 视图,它处理所有购物车项目,以便按如下方式创建订单
class PlaceOrderView(generics.CreateAPIView):
def post(self, request, *args, **kwargs):
user = request.user
cart = Cart_Item.objects.select_for_update().filter(userID = user).order_by('item_id__producerID')
order = {'producer':'',
'items': []
}
for item in cart:
if order['producer'] == item.values('item_id.producerID'):
order['items'].append(item)
else:
self.placeOrder(order)
order['producer'] = item.values('item_id.producerID')
order['items'] = []
order['items'].append(item)
def placeOrder(self,order):
with transaction.atomic():
#Business logic on order.
我试图做的是将所有购物车项目按特定生产商拥有的项目分组,然后为该组购物车项目下订单。我遇到问题的地方是访问购物车项目的嵌套字段“producerID”,需要这样做才能对我的所有购物车项目进行分组。
我的 placeOrder 方法使用 cartItem 对象,因此它们直接在函数中传递。目前我在for循环中序列化购物车项目只是为了比较producerID,但这感觉效率低下。我已经阅读了有关字段主题的 django 文档,但对嵌套字段的支持并不多。对该主题进行一些简单的解释会很棒!
【问题讨论】:
标签: django django-rest-framework backend rest