現在Djangoを使ったblogを制作しており、Blog内にManytoManyのカテゴリーの追加をしようとしています。
結論から申し上げますと、adminページ側での複数カテゴリー追加はできたのですが、Blogページでは、追加したカテゴリーがただの文字列としてしか表示されず、クリックしてそのカテゴリーに登録されている記事一覧を確認することができません。
ただ単に
カテゴリー: 漫画 アニメ
というような、クリック不可なカテゴリーとて感じになってしまいます。
おそらくHTMLとModel.pyに問題があるかと思い、かれこれ5時間ほど調べてみましたが、原因がさっぱりわかりません。
お手数ですが何が問題かわかるかたがいれば、お教え頂ければ幸いです。
※下記コードでは、カテゴリー機能追加したコードは削除しております
model.py
Python
1from django.db import models 2from django.contrib.auth.models import User 3 4 5STATUS = ( 6 (0,"Draft"), 7 (1,"Publish") 8) 9 10 11 12class Post(models.Model): 13 title = models.CharField(max_length=200, unique=True) 14 slug = models.SlugField(max_length=200, unique=True) 15 author = models.ForeignKey(User, on_delete= models.CASCADE,related_name='blog_posts') 16 updated_on = models.DateTimeField(auto_now= True) 17 content = models.TextField() 18 created_on = models.DateTimeField(auto_now_add=True) 19 status = models.IntegerField(choices=STATUS, default=0) 20 url = models.CharField(max_length=200, unique=True, default='') 21 image = models.ImageField(upload_to='images/',default='') 22 23 class Meta: 24 ordering = ['-created_on'] 25 26 27 def __str__(self): 28 return self.title 29
admin.py
from django.contrib import admin from .models import Post class PostAdmin(admin.ModelAdmin): list_display = ('title', 'slug', 'status','created_on', 'url') list_filter = ("status",) search_fields = ['title', 'content'] prepopulated_fields = {'slug': ('title',)} admin.site.register(Post, PostAdmin)
Views.py
from django.views import generic from .models import Post class PostList(generic.ListView): queryset = Post.objects.filter(status=1).order_by('-created_on') template_name = 'index.html' class PostDetail(generic.DetailView): model = Post template_name = 'post_detail.html'
url.py
from . import views from django.urls import path urlpatterns = [ path('', views.PostList.as_view(), name='home'), path('<slug:slug>/', views.PostDetail.as_view(), name='post_detail'), ]
post_detail.html()→ブログの記事を見るときのHTMLです
Python
1{% extends 'base.html' %} {% block content %} 2 3<div class="container"> 4 <div class="row"> 5 <div class="col-md-8 card mb-4 mt-3 left top"> 6 <div class="card-body"> 7 <h1>{% block title %} {{ object.title }} {% endblock title %}</h1> 8 <p class=" text-muted">{{ post.author }} | {{ post.created_on }}</p> 9 10 11 12<a href="https://{{ post.url }}">Visit yahoo.com!</a> 13<img src="{{ post.image.url}}" alt="{{ post.title }}"> 14 15 <p class="card-text ">{{ object.content | safe }}</p> 16 </div> 17 </div> 18 {% block sidebar %} {% include 'sidebar.html' %} {% endblock sidebar %} 19 </div> 20</div> 21 22{% endblock content %} 23
何卒宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。