質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Q&A

解決済

1回答

1784閲覧

Django BlogにManytoManyの複数カテゴリーを追加したい

trey_0329

総合スコア109

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

0グッド

0クリップ

投稿2020/05/27 04:30

現在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

何卒宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

https://realpython.com/get-started-with-django-1/
こちらをみながら解決しました

投稿2020/05/27 09:33

trey_0329

総合スコア109

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問