現在、各ユーザーが投稿できる簡易のSNSを作ろうとしているのですが、投稿者名の表示方法がわかりません。
下記コードの場合だとログイン中のユーザーが変わるたびに投稿者名も変わってしまいます。
html
1<div class="col-4"> 2 <p>User:<a href="{% url 'register:user_detail' user.pk %}">{{ user.first_name }}</a></p> 3</div>
どこかのタイミングで投稿者名の値を渡さなければいけないと思うのですが、どのタイミングでどのように書くのかわかりません。
ざっくりでもいいので流れなどアドバイスいただきたいです。
わかりやすいサイトなども教えていただけると幸いです。
よろしくお願いいたします。
views.py
python
1#詳細画面 2class ItemDetailView(DetailView): 3 model = Item 4#投稿画面 5class ItemCreateView(LoginRequiredMixin, CreateView): 6 model = Item 7 form_class = PostForm 8 template_name = 'register/item_form.html' 9 success_url = reverse_lazy('register:top') 10 11# 更新画面 12class ItemUpdateView(LoginRequiredMixin, UpdateView): 13 model = Item 14 form_class = PostForm 15 success_url = reverse_lazy('register:top') 16 17# 削除画面 18class ItemDeleteView(LoginRequiredMixin, DeleteView): 19 model = Item 20 success_url = reverse_lazy('register:top')
forms.py
python
1class PostForm(forms.ModelForm): 2 class Meta: 3 model = Item 4 fields = ('title', 'content','category',) 5 widgets = { 6 'title': forms.TextInput(attrs={'placeholder':'タイトルを入力してください'}), 7 }
urls.py
python
1 path('user_detail/<int:pk>/', views.UserDetail.as_view(), name='user_detail'),#int:pkは登録の番号(プライマリーキー) 2
参考サイト
https://qiita.com/okoppe8/items/54eb105c9c94c0960f14
https://narito.ninja/blog/detail/38/
追記
詳細画面のHTMLを追記させていただきます。
html
1{% load markdown_extras %} 2<div class="row"> 3 <div class="col-4"> 4 <a href="{% url 'register:user_detail' user.pk %}"><p>{{ user.first_name }}</p></a> 5 </div> 6 <div class="col-4"> 7 <p>{{ item.category }}</p> 8 </div> 9 <div class="col-4"> 10 <p>{{ item.created_at|date:"Y/m/d" }}</p> 11 </div> 12</div> 13<div class="row"> 14 <div class="card-text pl-0 pr-0" id="content"> 15 {{ item.content|markdown|safe }} 16 </div> 17</div>
#追記
models.pyを追記させていただきます。
python
1class Item(models.Model): 2 CATEGORY = [ 3 ("ビジネス","ビジネス"), 4 ("お金","お金"), 5 ("スポーツ","スポーツ"), 6 ("ライフスタイル","ライフスタイル"), 7 ("暇つぶし","暇つぶし"), 8 ("あるある","あるある"), 9 ("芸能","芸能"), 10 ("おもしろ","おもしろ"), 11 ("趣味","趣味"), 12 ("その他","その他"), 13 ] 14 15 title = models.CharField(verbose_name='タイトル',max_length=200,) 16 content = MDTextField() 17 category = models.CharField(verbose_name='カテゴリー',max_length=150,blank=True,choices=CATEGORY,) 18 created_at = models.DateTimeField(verbose_name='登録日',auto_now_add=True) 19 tags = TaggableManager(blank=True) # 追加 20 21 class Meta: 22 verbose_name = 'アイテム' 23 verbose_name_plural = 'アイテム' 24
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー