所以,我正在建设一个电子商务网站。当顾客点击";下订单";,网站创建订单,数据库更新完全正常。问题在于显示订单摘要。如果客户过去曾从该公司订购,则该订单将与新订单一起存储在数据库中。然后该站点抛出错误"0";返回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)
尝试:
Order.objects.filter(customer=user).order_by('-time_placed')
我认为你可以做到这一点:
Order.objects.filter(customer=user).latest("time_placed")
这只返回一个对象。