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 %}
您好,我正在构建一个带有购物车和结帐功能的网上商店。现在我正在尝试将产品及其数量添加到我想发送到电子邮件的电子邮件表单中,但我不知道如何在不获取的情况下获得 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 %}