[英]Django: access model instances
我有一個名為OrderItem
的 model
class OrderItem(models.Model):
customer = models.ForeignKey(
User, on_delete=models.SET_NULL, blank=True, null=True)
product = models.ForeignKey(
Product, on_delete=models.SET_NULL, blank=True, null=True)
order = models.ForeignKey(
Order, on_delete=models.SET_NULL, blank=True, null=True)
quantity = models.IntegerField(default=0, null=True, blank=True)
date_added = models.DateTimeField(auto_now_add=True)
和一個名為Order
的 model
class Order(models.Model):
customer = models.ForeignKey(
User, on_delete=models.SET_NULL, blank=True, null=True)
date_ordered = models.DateTimeField(auto_now_add=True)
complete = models.BooleanField(default=False, null=True, blank=False)
transaction_id = models.CharField(max_length=200, null=True)
現在在我的views.py
中,我有一個OrderItem model order
實例。 在我的訂單 model中,我需要將其order
實例設置為完成。 我正在嘗試如下操作:
orderID = OrderItem.objects.filter(order_id=4)
#lets say there are more than one order_id with the value of 4
for order in orderID:
order = Order.objects.get(id=orderID)
order.complete=True
order.save()
這段代碼給了我:
ValueError: The QuerySet value for an exact lookup must be limited to one result using slicing.
如何解決這個問題?
您的示例中的orderID
可以是列表,其大小可能大於一。 這使得以下操作失敗:
orderID=OrderItem.objects.filter(order_id=4)
#lets say there are more than one order_id with the value of 4
for order in orderID:
order = Order.objects.get(id=orderID) # FAIL: list passed as ID
order.complete=True
order.save()
您應該將order
作為參數傳遞給.get()
function 或使用相關的 model,例如
order_items=OrderItem.objects.filter(order_id=4)
for order_item in order_items:
order = order_item.order
order.complete=True
order.save()
orderID = OrderItem.objects.filter(order_id=4)
在這里,您將選擇與 id=4 的Order
相關的所有OrderItem
實例。 然后,您在所有OrderItem
對象上循環,並嘗試在與每個OrderItem
關聯的訂單上設置標志complete=True
。
但是查詢是構造的,例如所有OrderItem
實例都將與同一個Order
相關。 因此,以下內容就足夠了,它是數據庫上的單個查詢:
Order.objects.filter(id=4).update(complete=True)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.