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

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

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

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1661閲覧

Djangoにおいて、テーブルの値を読み取り表示することができない

DR.py

総合スコア18

Django

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/09/23 10:25

前提・実現したいこと

Djangoの管理サイトから作った日記のタイトルと本文の20文字を読み取ってmypageに表示したい

発生している問題・エラーメッセージ

エラーは何も起こっておらず、テーブルにもしっかり値が入力されているのですがマイページに日記がありませんと表示されてしまう。

mypage.html

{% extends 'base.html' %} {% load static %} {% block title %}マイページ % endblock %} {% block active_mypage %}active{% endblock %} {% block head %} <link href="{% static 'css/clean-blog.min.css' %}" rel="stylesheet"> {% endblock %} {% block contents %} <div class="container"> <div class="row"> <div class="my-div-style w-100"> <div class="col-lg-8 col-md-10 mx-auto"> {% for home in mypage %} <div class="post-preview"> <a href="#"> <h2 class="post-title"> {{ home.title }} </h2> <h3 class="post-subtitle"> {{ home.content|truncatechars:20 }} </h3> </a> <p class="post-meta">{{ home.created_at }}</p> </div> <hr> {% empty %} <p>日記がありません。</p> {% endfor %} </div> </div> </div> </div> {% endblock %}

###model.py

from accounts.models import CustomUser from django.db import models class home(models.Model): """日記モデル""" user = models.ForeignKey(CustomUser, verbose_name='ユーザー', on_delete=models.PROTECT) title = models.CharField(verbose_name='タイトル', max_length=40) content = models.TextField(verbose_name='本文', blank=True, null=True) photo1 = models.ImageField(verbose_name='写真1', blank=True, null=True) photo2 = models.ImageField(verbose_name='写真2', blank=True, null=True) photo3 = models.ImageField(verbose_name='写真3', blank=True, null=True) created_at = models.DateTimeField(verbose_name='作成日時', auto_now_add=True) updated_at = models.DateTimeField(verbose_name='更新日時', auto_now=True) class Meta: verbose_name_plural = 'home' def __str__(self): return self.title

###urls.py

from django.urls import path from . import views app_name = 'home' urlpatterns = [ path('', views.IndexView.as_view(), name="index"), path('inquiry/', views.InquiryView.as_view(), name="inquiry"), path('mypage/', views.MypageView.as_view(), name="mypage"), ]

###view.py

class MypageView(LoginRequiredMixin, generic.ListView): model = home template_name = 'mypage.html' def get_queryset(self): diaries = home.objects.filter(user=self.request.user).order_by('-created_at') return diaries

試したこと

mypage.htmlの{% for home in mypage %}のhomeをhome_mypageなどに変えてみたが表示は変わらなかった。

makemigrationsとmigrateはエラーなく実行することができた

補足情報(FW/ツールのバージョンなど)

DBのテーブルにはしっかりとデータが入っている

python manage.py dbshell

=# \dt
リレーション一覧
スキーマ | 名前 | 型 | 所有者
----------+--------------------------------------+----------+----------
public | account_emailaddress | テーブル | postgres
public | account_emailconfirmation | テーブル | postgres
public | accounts_customuser | テーブル | postgres
public | accounts_customuser_groups | テーブル | postgres
public | accounts_customuser_user_permissions | テーブル | postgres
public | auth_group | テーブル | postgres
public | auth_group_permissions | テーブル | postgres
public | auth_permission | テーブル | postgres
public | django_admin_log | テーブル | postgres
public | django_content_type | テーブル | postgres
public | django_migrations | テーブル | postgres
public | django_session | テーブル | postgres
public | django_site | テーブル | postgres
public | home_home          | テーブル | postgres

=# select * from home_home;

id | title | content | photo1 | photo2 | photo3 | created_at | updated_at | user_id ----+--------+------------------+---------------------------------------------------------------------+--------+--------+-------------------------------+-------------------------------+--------- 1 | 最高 | お宝が二十個ある | The_Go_Programming_Language_-_Google_Chrome_2020_09_16_16_56_11.png | | | 2020-09-23 02:05:23.710549+09 | 2020-09-23 02:39:19.290746+09 | 1 2 | あふぁ | ;;; | | | | 2020-09-23 02:48:20.100619+09 | 2020-09-23 02:48:20.100619+09 | 1 (2 行)

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

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

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

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

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

guest

回答1

0

ベストアンサー

get_querysetから返される値はテンプレートではobject_listで表示できますので、mypage.htmlの{% for home in mypage %}を{% for home in object_list %}に変えてみたらどうでしょうか?

HTML

1{% block contents %} 2<div class="container"> 3 <div class="row"> 4 <div class="my-div-style w-100"> 5 <div class="col-lg-8 col-md-10 mx-auto"> 6 # {% for home in mypage %} # 削除 7 {% for home in object_list %} # 追加 8 <div class="post-preview"> 9 <a href="#"> 10 <h2 class="post-title"> 11 {{ home.title }} 12 </h2> 13 <h3 class="post-subtitle"> 14 {{ home.content|truncatechars:20 }} 15 </h3> 16 </a> 17 <p class="post-meta">{{ home.created_at }}</p> 18 </div> 19 <hr> 20 {% empty %} 21 <p>日記がありません。</p> 22 {% endfor %} 23 24 </div> 25 </div> 26 </div> 27</div> 28{% endblock %}

もしくはviews.pyにcontext_object_nameを追加することで任意の変数名に変更できるようです。

Python

1# views.py 2 3class MypageView(LoginRequiredMixin, generic.ListView): 4 model = home 5 template_name = 'mypage.html' 6 context_object_name = 'mypage' # 追加 7 8 def get_queryset(self): 9 diaries = home.objects.filter(user=self.request.user).order_by('-created_at') 10 return diaries

HTML

1{% block contents %} 2<div class="container"> 3 <div class="row"> 4 <div class="my-div-style w-100"> 5 <div class="col-lg-8 col-md-10 mx-auto"> 6 {% for home in mypage %} # そのまま 7 <div class="post-preview"> 8 <a href="#"> 9 <h2 class="post-title"> 10 {{ home.title }} 11 </h2> 12 <h3 class="post-subtitle"> 13 {{ home.content|truncatechars:20 }} 14 </h3> 15 </a> 16 <p class="post-meta">{{ home.created_at }}</p> 17 </div> 18 <hr> 19 {% empty %} 20 <p>日記がありません。</p> 21 {% endfor %} 22 23 </div> 24 </div> 25 </div> 26</div> 27{% endblock %}

参考文献:Djangoのobject_listの名前を変更する方法 | Awesome Blog

投稿2020/09/23 12:37

swing_swimming

swing_swimming

総合スコア54

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

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

DR.py

2020/09/23 12:45

ありがとうございます。 テーブルの中を読み込むことができたと思います。 ですが「日記がありません」とは出てこなくなったのですが、肝心の日記のタイトルも出てこないです。 もう少し自分で調べてみます。 丁寧な2パターンの回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問