簡體   English   中英

Django:訪問 model 實例

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM