Djangoのモデルをテンプレートに表示できない
解決したいこと
Djangoのテンプレートにモデルを表示させたいです。
{% for product in products %}
{{ product.name }}
{% endfor %}
だと表示されるのですが、tagsに変更すると
shop.PostTag.None と表示されてしまうので
解決方法教えていただきたいです。
発生している問題・エラー
shop.PostTag.None
テンプレートの記述
エラー1
views.py の記述
エラー2
model.py
from django.db import models
from django.urls import reverse
from django.shortcuts import render
class PostTag(models.Model):
name = models.CharField(max_length=200)
def __str__(self):
return self.name
def image_path(instance, filename):
ext = filename.split('.')[-1]
new_name = instance.name
return f'producthover/{new_name}.{ext}'
class Product(models.Model):
name = models.CharField(verbose_name='商品名', max_length=250, unique=True)
slug = models.SlugField(verbose_name='URLに表示される名前', max_length=250, unique=True)
description = models.TextField(verbose_name='説明', blank=True)
price = models.IntegerField()
image = models.ImageField(upload_to='product', blank=True)
hover_image = models.ImageField(verbose_name='ポップアップの画像', upload_to=image_path, blank=True, )
stock = models.IntegerField()
available = models.BooleanField(default=True)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
tags = models.ManyToManyField(PostTag)
objects = models.Manager()
valid_objects = ValidManager()
class Meta:
ordering = ('name',)
verbose_name = 'product'
verbose_name_plural = 'products'
def __str__(self):
return '{}'.format(self.name)
def get_url(self):
return reverse('shop:product_detail', args=[self.slug])
def index(request):
image_request = request.user.set_image_path
return render(request, 'shop/base.html', {'image_request': image_request})
views.py
from django.shortcuts import render
from shop.models import Product
from django.core.paginator import Paginator, EmptyPage, InvalidPage
def all_products(request):
products_list = Product.valid_objects.all()
paginator = Paginator(products_list, per_page=16)
try:
page = int(request.GET.get('page', '1'))
except:
page = 1
try:
products = paginator.page(page)
except (EmptyPage, InvalidPage):
products = paginator.page(paginator.num_pages)
return render(request, 'shop/product_list.html', {'products': products})
0