一个困难的对象查询



所以,我正在建设一个电子商务网站。当顾客点击";下订单";,网站创建订单,数据库更新完全正常。问题在于显示订单摘要。如果客户过去曾从该公司订购,则该订单将与新订单一起存储在数据库中。然后该站点抛出错误"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")

这只返回一个对象。