Django

时间:2017-11-23 16:36:27

标签: python html sql django email

我仍然是一名学生如此抱歉,如果我犯了愚蠢的错误而且代码看起来很难看,我仍然需要清理它。我正在忙于一个我们必须建立在线网上商店的项目。数据库已经设置好,电子邮件系统也是如此,但每当我尝试实现有序数据(添加到您的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))

1 个答案:

答案 0 :(得分:2)

我觉得有一种困惑。根据您的order,您无法对orderDetailsEntry views.py进行迭代。

orderDetailsEntry不可迭代,因为这是您刚插入数据库的新行,而不是查询集。

也许你想做类似以下的事情?

order = OrderDetails.objects.filter(amount=..., orderNum=..., productNum=...)