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

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

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

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

3056閲覧

Django リレーションモデル 参照に関して

stwebyy

総合スコア14

Django

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/07/08 15:29

現在、Djangoを用いて自作アプリを作成しています。
モデル間のリレーション(1:多)を実装し、1のほうから多を参照してテンプレートに抽出したいと考えています。

Django

1models.py 2 3class Category(models.Model): 4 class Meta: 5 db_table = 'category' 6 7 name = models.CharField('カテゴリ名', max_length=50) 8 9 def __str__(self): 10 return self.name 11 12class Article(models.Model): 13 class Meta: 14 db_table = 'article' 15 16 user = models.ForeignKey(User, verbose_name='ユーザーID', on_delete=models.CASCADE) 17 title = models.CharField('タイトル', max_length=255) 18 text = models.CharField('本文', max_length=10000) 19 category = models.ForeignKey(Category, verbose_name='カテゴリ', on_delete=models.SET_NULL, null=True) 20 thumnail = models.ImageField( 21 'サムネイル', upload_to='post_thumbnail/%Y/%m/%d/', blank=True, null=True) 22 created_at = models.DateTimeField('作成日', default=timezone.now) 23

Django

1views.py 2 3class CategoryDetail(LoginRequiredMixin, DetailView): 4 model = Category 5 template_name = 'article/category_detail.html' 6 def get_context_data(self, **kwargs): 7 context = super().get_context_data(**kwargs) 8 context['article_list'] = Article.objects.filter(id=Category.id) 9 return context 10 11category_detail = CategoryDetail.as_view() 12

Django

1category_detail.html 2 3{% extends "base.html" %} 4{% load static %} 5{% block content %} 6 7 <ul> 8 <li>{{ object.name }}</li> 9 </ul> 10 11{{ object.name }}の記事一覧 12{% for articles in article_list %} 13 <ul> 14 <li><a href="{% url 'article:detail' pk=articles.id %}">{{ articles.title }}</a></li> 15 {% empty %} 16 <li>objectがないよ</li> 17 </ul> 18 {% endfor %} 19{% endblock %} 20 21

やりたい事としてはCategoryモデルのidからArticleモデルのcategory_idを参照して、そのタイトルを繰り返し文で抽出したいと考えています。
しかし、エラーメッセージでint() argument must be a string, a bytes-like object or a number, not 'DeferredAttribute'
というエラーが発生して解決方法がわかりません。
そもそも、views.pyのfilterの書き方が違うのでしょうか・・・?
どなたか、どうすればよいか教えていただけますでしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

context['article_list'] = Article.objects.filter(id=Category.id)

上記の部分を以下のように変更して見るとどうでしょうか?

context['article_list'] = Article.objects.filter(id=self.object)

投稿2018/07/08 16:16

mtb_beta

総合スコア181

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

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

stwebyy

2018/07/08 23:05

回答ありがとうございます。 上記コードを入力して見ましたが、`int() argument must be a string, a bytes-like object or a number, not 'Category'` というエラーが発生してしまいましたので、self.object.idにすると表示されました! ありがとうございます! ただ、HTML上での出力が `Article object (3)`となってしまいます。 記事のタイトルを抽出するにはviewに何か描き加えないといけないのでしょうか?
stwebyy

2018/07/09 15:31

失礼しました。 単純にtemplateにtitleをつけていませんでした。 丁寧に回答していただきありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問