所以,我有一個我正在建立的電子商務網站。當客戶單擊“下訂單”時,站點會創建訂單,并且資料庫更新完全正常。問題在于顯示訂單摘要。如果客戶過去曾從該公司訂購過,那么該訂單將與新訂單一起存盤在資料庫中。然后,當我嘗試通過將訂單表與用戶表相關聯的外鍵訪問該站點時,該站點會拋出錯誤“回傳了 2 個物件”。這樣做的原因對我來說很明顯,所以我添加了一個日期時間欄位并將 auto_now_add 屬性設定為 TRUE。我遇到的問題是為該特定客戶選擇最新的訂單。有沒有辦法使用這樣的東西?
user = request.user
Order.objects.filter(Customer=user).date_placed.latest()
filter() 回傳一個集合的事實讓我認為 sytax 不會正確執行。也許在一個將 User 作為引數的函式內有一個 for 回圈?我不知道如何處理這個,我想我會伸出手來。謝謝你們。
查看請求:
def orderSummary(request):
context = {}
if request.user.is_authenticated:
owner = request.user.id
user = request.user
cart = Cart.objects.get(cart_owner=owner)
held_items = Order_holding.objects.filter(cart=cart)
new_order = Order(customer=user)
new_order.save()
order = Order.objects.get(customer = user)
for item in held_items:
order_item = Order_item(order=order, blackAndWhite=item.blackAndWhite, product= item.product, color = item.color, gloss=item.gloss, matte=item.matte, size=item.size, notes=item.notes, cuts=item.cuts, grommets=item.grommets, quantity=item.quantity, subtotal=item.subtotal, cart=item.cart)
order_item.save()
item.delete()
order_items = Order_item.objects.filter(cart=cart)
for item in order_items:
order.items.add(item)
order.save()
context['order_items'] = order.items.all()
return render(request, 'order/orderSummary.html', context)
else:
return HttpResponseRedirect(reverse("login"))
order.models.py 檔案:
from django.db import models
from django.contrib.auth.models import User
from products.models import Product
from cart.models import Cart
class Order_item(models.Model):
#front_image = models.ImageField()
blackAndWhite = models.BooleanField(default=False)
product = models.ForeignKey(Product, on_delete=models.CASCADE, null=True)
color = models.BooleanField(default=False)
gloss = models.BooleanField(default=False)
matte = models.BooleanField(default=False)
size = models.CharField(null=True, blank=True, max_length=50)
notes = models.CharField(null=True, blank=True, max_length=1000)
cuts = models.IntegerField(null=True, blank=True, max_length=200)
grommets = models.IntegerField(null=True, blank=True, max_length=200)
quantity = models.IntegerField(null=True, blank=True, max_length=200)
cart = models.ForeignKey(Cart, on_delete=models.CASCADE, null=True)
subtotal = models.DecimalField(max_digits=100, decimal_places=2, default=0.00)
class Order(models.Model):
customer = models.ForeignKey(User, on_delete=models.CASCADE)
items = models.ManyToManyField(Order_item, null=True)
time_placed = models.DateTimeField(auto_now_add=True, null=True)
class Order_holding(models.Model):
blackAndWhite = models.BooleanField(default=False)
product = models.ForeignKey(Product, on_delete=models.CASCADE, null=True)
color = models.BooleanField(default=False)
gloss = models.BooleanField(default=False)
matte = models.BooleanField(default=False)
size = models.CharField(null=True, blank=True, max_length=50)
notes = models.CharField(null=True, blank=True, max_length=1000)
cuts = models.IntegerField(null=True, blank=True, max_length=200)
grommets = models.IntegerField(null=True, blank=True, max_length=200)
quantity = models.IntegerField(null=True, blank=True, max_length=200)
cart = models.ForeignKey(Cart, on_delete=models.CASCADE, null=True)
order = models.ForeignKey(Order, on_delete=models.CASCADE, null=True)
subtotal = models.DecimalField(max_digits=100, decimal_places=2, default=0.00)
uj5u.com熱心網友回復:
嘗試 :
Order.objects.filter(customer=user).order_by('-time_placed')
uj5u.com熱心網友回復:
我認為你可以這樣做:
Order.objects.filter(customer=user).latest("time_placed")
這僅回傳一個物件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/403013.html
標籤:
