私はまだ学生ですので、私は愚かな間違いをしてコードが醜く見える場合、私はまだそれをきれいにする必要があります。私はオンラインWebショップを作らなければならないプロジェクトに忙しかったです。データベースは既に設定されており、メールシステムもありますが、注文データ(ShoppingCartに追加されたアイテム)を実装しようとするたびに、メールにアイテムを指定できません。 ヘッドアップ、私は可能な限り明確なエラーを作るために、以下にたくさんの情報を書きました。Djangoの反復エラー
これは私が得たエラーです:チェックアウト/で
は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>
この210は、電子メールの背後にあるロジックです:
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, '[email protected]', [c])
email.attach_alternative(html_content, "text/html"))
email.mixed_subtype = 'related'
email.send()
clearCart(request) #Clears Shoppingcart
PS:私は、私はちょうど私がまだに持っていたガイドに従うことをしようとしていた、「オーダー= 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))
あなたは{注文%でcreateOrderため%} '何を期待し'行うには?おそらく '{%for%}'タグと '' {%endfor%} 'タグを削除し、' {{order.orderNum}} '、' {{order.productNum}} '、' {{ order.amount}} '。 – Alasdair
私はこのようにすれば、カート内の利用可能なアイテムすべてを繰り返してそのプロパティを与えることになると思ったが、私はそれにショットを与えるだろう –