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

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

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

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

Q&A

解決済

1回答

1914閲覧

DjangoのModelの一部が表示されない

trey_0329

総合スコア109

Django

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

0グッド

0クリップ

投稿2020/05/28 12:02

編集2020/05/29 06:00

Djangoを使ってBlogを作成しております。

Modelにclass Categoryを下記のように追加しました
イメージ説明

そしてHTML上で表示するために、下記のように記載しました
イメージ説明

Admin側でCategory内にnameとDescriptionデータを下記のように追加したのですが、
イメージ説明

実際のHTMLではSteve Jobsという、Category modelのnameの部分しか表示されません↓
![イメージ説明]

どのようにすればnameとdescription両方を表示できるでしょうか?
{{ category }}とすればmodel categoryに登録されているものが表示される(今回の場合はname, description)という認識でしたが、間違っていますか?

ちなみにviewは下記のように設定しています。

python

1def blog_category(request, category): 2 posts = Post.objects.filter(categories__name__contains=category).order_by( 3 "-created_on" 4 ) 5 context = {"category": category, "posts": posts,} 6 return render(request, "blog_category.html", context)

下記コードを全記しました

model.py

from django.db import models class Category(models.Model): name = models.CharField(max_length=20) description = models.TextField(default="") def __str__(self): return self.name + self.description

view.py

from django.shortcuts import render from blog.models import Post, Category def blog_category(request, category): posts = Post.objects.filter(categories__name__contains=category).order_by( "-created_on" ) context = {"category": category, "posts": posts,} return render(request, "blog_category.html", context)

HTML

{% extends "base.html" %} {% block page_content %} <div class="col-md-8 offset-md-2"> <h1>{{ category | title }}</h1> <p>{{category}}</p> <hr> {% for post in posts %} <h2><a href="{% url 'blog_detail' post.pk%}">{{ post.title }}</a></h2> <small> {{ post.created_on.date }} |&nbsp; Categories:&nbsp; {% for category in post.categories.all %} <a href="{% url 'blog_category' category.name %}"> {{ category.name }} </a>&nbsp; {% endfor %} </small> <p>{{ post.body | slice:":400" }}...</p> {% endfor %} </div> {% endblock %}

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

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

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

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

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

guest

回答1

0

ベストアンサー

views.pyを

Python

1def blog_category(request, category): 2 posts = Post.objects.filter(categories__name__contains=category).order_by( 3 "-created_on" 4 ) 5 category = Category.objects.get(name=category) 6 context = {"category": category, "posts": posts,} 7 return render(request, "blog_category.html", context) 8```こうしてください。で、HTMLを 9```HTML 10<h1>{{category.name}}</h1> 11<p>{{category.description}}</p> 12```でいけます。

投稿2020/05/29 04:14

編集2020/05/29 06:47
ForestSeo

総合スコア2720

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

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

trey_0329

2020/05/29 05:55

ご回答ありがとうございます。 どちらの方法も試してみましたが、やはり表示されません。 こちらでも色々試してみます。
trey_0329

2020/05/29 06:13

お教えいただいたやり方で、HTML内の {% for post in posts %} {% for category in post.categories.all %} {% endfor %} {% endfor %} この中での表示は可能になりました
ForestSeo

2020/05/29 06:28

def blog_category(request, category): このcategoryには何が入っているんですか?
trey_0329

2020/05/29 06:39

このcategoryには、category選択をするとそのcategoryに関連した記事が表示されるようになっています(回答になっていなかったらすみません) この部分は下記チュートリアルを参考に作成しました。 https://realpython.com/get-started-with-django-1/ の Next, you can start to create the blog_category() view. The view function will need to take a category name as an argument and query the Post database for all posts that have been assigned the given category: のところです
ForestSeo

2020/05/29 06:48 編集

えっとcategoryにはcategoryの名前が入るってことですか? 編集致しましたので、上記のもので試してみてください
trey_0329

2020/05/29 06:47

その認識でいます。
ForestSeo

2020/05/29 06:48

じゃあ行けると思います
trey_0329

2020/05/29 06:57

Exception Type: DoesNotExist at /Steve JobsOK he is the most incredible person ever seen/ Exception Value: Category matching query does not exist. とエラーになってしまいました。 すみません、私のcategoryの解釈が間違っているようです。
ForestSeo

2020/05/29 07:02 編集

一致するクエリがないってなってますよね。 なんていうURLにアクセスしたんですか? あと、print(category)をblog_categoryi関数の最初に入れてみてください。 なんて返されますか?
trey_0329

2020/05/29 07:09

すみません、こちらの不手際でmodel.pyの+self.descriptionという部分を消し忘れていたために、category+description混合のURLにアクセスしておりました。 +self.descriptionを消して、頂いたコードをHTMLに記載したところ、無事にcategoryとdescriptionが二つとも表示されていました。 辛抱強くアドバイス頂き、誠にありがとうございます。 大変助かりました。
trey_0329

2020/06/03 14:11 編集

度々申し訳ございません。 追記で質問させて頂きたいのですが、 下記models.pyのCategory classのpersonとdesctiptionを class Category(models.Model): person = models.CharField(max_length=20) description = models.TextField() slug = models.SlugField() def __str__(self): return self.person 下記views.pyに何らかのコードを追加して def blog_category(request, category): posts = Post.objects.filter(categories__slug__contains=category).order_by("-created_on").distinct() context = {"category": category, "posts": posts} return render(request, "blog_category.html", context) HTML上に{{ person }}{{ description }}のような感じで表示したいのですが、お教えいただいた方法など試してみましたが、うまくいきません。 何度もご質問し誠に恐縮ですが、もしおわかりでしたら是非ご教示頂けませんでしょうか。何卒宜しくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問