現在、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の書き方が違うのでしょうか・・・?
どなたか、どうすればよいか教えていただけますでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/08 23:05
2018/07/09 15:31