我仍然是一名学生如此抱歉,如果我犯了愚蠢的错误而且代码看起来很难看,我仍然需要清理它。我正在忙于一个我们必须建立在线网上商店的项目。数据库已经设置好,电子邮件系统也是如此,但每当我尝试实现有序数据(添加到您的ShoppingCart中的项目)时,我都无法指定电子邮件中的项目。 抬头,我在下面写了很多信息,以尽量清除错误。
这是我收到的错误:
/ checkout /的TypeError
'OrderDetails'对象不可迭代
模板渲染期间出错
16 {% for createOrder in order %}
这是电子邮件html:
<!--This order email-->
{% load custom_tags %}
{% load shoppingcart_tags %}
{% block extrastyle %}
<style type="text/css">
body.login {background-color: palegreen;}
</style>
{% endblock %}
{% autoescape off %}
<p>Beste klant,</p>
<p></p>
<p>U heeft zojuist een bestelling geplaatst op onze website voor de volgende producten:</p>
{% block purchases %}
{% for createOrder in order %}
<h1>{{ orderDetails.orderNum }}</h1>
<h1>{{ orderDetails.productNum }}</h1>
<h1>{{ orderDetails.amount }}</h1>
{% endfor %}
{% endblock %}
<p>Wij streven ernaar uw bestelling binnen 2 dagen tijd bij u te leveren.</p>
<p>Als u nog enige vragen heeft, wees dan niet bang ons te contacteren via onze online contact forum</p>
<p>http://HiddenName.com/contact/</p>
<p></p>
<p>Wij hopen u hierbij genoeg van dienst geweest te zijn.</p>
<p></p>
<p>Met vriendelijke groeten,</p>
<p></p>
<p><strong>HiddenName</strong></p>
{% endautoescape %}
</body>
</html>
这是电子邮件背后的逻辑:
from django.db.models import Max
from ..models import Orders, OrderDetails, ShoppingCart, Customers, Address
from django.utils import timezone
from .CartOps import clearCart
from django.template.loader import render_to_string
from django.core.mail import send_mail, EmailMultiAlternatives
from ..models import OrderDetails
def createOrder(request):
date = timezone.now().date()
status = "Processed"
if not request.user.is_authenticated:
custID = createCustomer(request)
else:
custID = request.user.id
orderEntry = Orders(orderNum=getNewOrderNum(), orderDate=date, orderStatus=status, customerID=Customers(customerID=custID))
orderEntry.save()
for e in ShoppingCart.objects.all().filter(session_key=request.session.session_key):
orderDetailsEntry = OrderDetails(amount=e.amount, orderNum=Orders(orderNum=orderEntry.orderNum), productNum=e.prodNum)
orderDetailsEntry.save()
createAddress(request, custID) #Sla het adres op, of update deze indien nodig
c = request.session['customer_email']
order = orderDetailsEntry
html_content = render_to_string('mail/order_complete_email.html', { "order" : order })
text_content = render_to_string('mail/order_complete_email.txt')
email = EmailMultiAlternatives("Your order details", text_content, 'noreply@HiddenName.com', [c])
email.attach_alternative(html_content, "text/html"))
email.mixed_subtype = 'related'
email.send()
clearCart(request) #Clears Shoppingcart
PS:我知道“order = orderDetailsEntry”不是必需的,我只是想按照指南进行操作,我仍然需要更改。
如果需要,这就是模型的样子:
class OrderDetails(models.Model):
class Meta:
unique_together = ('orderNum', 'productNum')
verbose_name_plural = "Order details"
orderNum = models.ForeignKey(Orders, db_column='orderNum')
productNum = models.ForeignKey(Products, db_column='productNum')
amount = models.IntegerField()
def __str__(self):
return (str(self.orderNum))
答案 0 :(得分:2)
我觉得有一种困惑。根据您的order
,您无法对orderDetailsEntry
views.py
进行迭代。
orderDetailsEntry
不可迭代,因为这是您刚插入数据库的新行,而不是查询集。
也许你想做类似以下的事情?
order = OrderDetails.objects.filter(amount=..., orderNum=..., productNum=...)