我想使用get_or_create
而不是这样做:
cart = client.cart
cartitems_cart = cart.__cartitem_set
if not cartitems_cart.filter(item=stockitem).exists():
cartitem = CartItem.objects.create(item=stockitem)
else:
cartitem = cartitems_cart.objects.get(item=stockitem)
有可能吗?
模型看起来像这样:
class CartItem(models.Model):
item = models.ForeignKey(StockItem, blank=True)
quantity = models.IntegerField(default=1, null=True)
class Cart(models.Model):
items = models.ManyToManyField(CartItem, blank=True)
因此,我需要获取或创建与CartItem
相关的Cart
。我不确定如何编写该查询。
答案 0 :(得分:2)
首先,您的设计存在缺陷。 M2M关系允许购物车商品不应该有多个购物车。您应该将一个FK字段添加到CartItem模型,而不是将M2M字段添加到购物车模型:
class Cart(models.Model):
user = models.ForeignKey(User)
class CartItem(models.Model):
item = models.ForeignKey(StockItem, blank=True)
quantity = models.IntegerField(default=1, null=True)
cart = models.ForeignKey(Cart, related_name="items")
所以你可以做到以下几点:
cartitem, created = client.cart.items.get_or_create(item=stockitem)
或
cartitem, created = CartItem.objects.get_or_create(cart=client.cart, item=stockitem)
请查看documentation,了解有关get_or_create
其他参数的更多信息。