前提・実現したいこと
お世話になります。
テンプレートでfor文を使い表示させようとしたところエラーが出てしまいました。
どうぞよろしくお願いいたします。
発生している問題・エラーメッセージ
TypeError: 'BoughtProduct' object is not iterable
該当のソースコード
models.py
class BoughtProduct(models.Model): user = models.ForeignKey(Users, on_delete=models.CASCADE) product = models.ForeignKey(Product, on_delete=models.CASCADE)
views.py
def bought_products(request,bought_products_id): products = Product.objects.get(id=bought_products_id) if products.count >= 1: bought_products=BoughtProduct() bought_products.product = products bought_products.user = request.user bought_products.save() bought_product = bought_products else: raise ValidationError('エラーが発生しました。事務局までお問い合わせください。') if request.method =="GET": #----email----- subject = 'TEXMA: 商品が購入されました。' message = """商品が購入されました。\n商品名: {}\n発送場所{}""".format(products.product_name,products.place) email_from = request.user.email email_to = [products.user.email,] send_mail(subject, message, email_from, email_to) print(bought_product) return render(request, 'buy_products.html',context={ 'products':products, 'bought_product':bought_product })
template(buy_product.html)
{% extends 'base.html' %} {% block content %} <h1>購入商品一覧</h1> {% for product in bought_product %} {% if product.user == request.user %} {{product.product_name}} {%endif%} {%endfor%} {%endblock%}
試したこと
データを挿入してみましたがダメでした。
bought_productはmodelのBoughtProductで、全ての値がForeignKeyです。
ですので、テンプレートに下記のように書いてみたのですが、エラーになってしまいました。
{% extends 'base.html' %} {% block content %} <h1>購入商品一覧</h1> {% for product in bought_product.product %} {% if product.user == request.user %} {{product.product_name}} {%endif%} {%endfor%} {%endblock%}
上記のエラー内容
'Product' object is not iterable
BoughtProduct object (7) Internal Server Error: /SellText/bought_products/9/ packages/django/template/defaulttags.py", line 167, in render values = list(values) TypeError: 'Product' object is not iterable
補足情報(FW/ツールのバージョンなど)
Django3, python3.8
回答1件
あなたの回答
tips
プレビュー