AttributeError: 'QuerySet' object has no attribute 'product' ERROR

AttributeError: 'QuerySet' object has no attribute 'product' ERROR

您好,我正在构建一个带有购物车和结帐功能的网上商店。现在我正在尝试将产品及其数量添加到我想发送到电子邮件的电子邮件表单中,但我不知道如何在不获取的情况下获得 item.name 或 item.quantity错误如下所示。

我有以下型号:

class Customer(models.Model):
    user = models.OneToOneField(User, null=True, blank=True, on_delete=models.CASCADE)
    name = models.CharField(max_length=200, null=True)
    email = models.CharField(max_length=200)

    def __str__(self):
        return self.name


class Product(models.Model):
    name = models.CharField(max_length=200, null=True)
    price = models.FloatField()
    digital = models.BooleanField(default=False, null=True, blank=False)  # Nicht nötig
    image = models.ImageField(null=True, blank=True)

    def __str__(self):
        return self.name

    @property
    def imageURL(self):
        try:
            url = self.image.url
        except:
            url = ''
        return url


class Order(models.Model):
    customer = models.ForeignKey(Customer, 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)

    def __str__(self):
        return str(self.id)

    @property
    def get_cart_total(self):
        orderitems = self.orderitem_set.all()
        total = sum([item.get_total for item in orderitems])
        return total

    @property
    def get_cart_items(self):
        orderitems = self.orderitem_set.all()
        total = sum([item.quantity for item in orderitems])
        return total



class OrderItem(models.Model):
    product = models.ForeignKey(Product, on_delete=models.SET_NULL, null=True)
    order = models.ForeignKey(Order, on_delete=models.SET_NULL, null=True)
    quantity = models.IntegerField(default=0, null=True, blank=True)
    date_added = models.DateTimeField(auto_now_add=True)

    @property
    def get_total(self):
        total = self.product.price * self.quantity
        return total

所以我试图从查询集中获取产品名称和数量。但是我得到了标题中描述的错误

AttributeError: 'QuerySet' object has no attribute 'product'.

我正在尝试将客户选择的产品名称和数量附加到消息变量,该消息变量将通过 sendmail() 发送到电子邮件。

这是我的观点:

@login_required(login_url='login')
def checkout(request):
    if request.method == "POST":
        message_name = request.POST['message-name']
        message_email = request.POST['message-email']
        message = request.POST['message']
        message_to_send = str(message)
        # send an email
        send_mail(
             'message from ' + message_name,  # subject
             message_to_send,  # message
             message_email,  # from email
             ['jeampo@outlook.de'],  # To Email
        )
    if request.user.is_authenticated:
        customer = request.user.customer
        order, created = Order.objects.get_or_create(customer=customer, complete=False)
        items = order.orderitem_set.all()
        cartItems = order.get_cart_items
        print(items.product.name)
        print(items.quantity)

    context = {'items': items, 'order': order, 'cartItems': cartItems}
    return render(request, 'store/checkout.html', context)

感谢您的帮助。

您在 print 语句中调用 items.product.name,但 items 是一组对象,而不仅仅是一个对象。

您可以通过在 views.py 中使用以下代码代替 print(items.product.name)

来解决此问题
for item in items:
    print(item.product.name)

您也可以使用 {% for %} 代码在您的模板中直接引用它。

示例:

在你的template.html

里面
{% for item in items %}
    <h1>{{item.product.name}}</h1>
{% endfor %}