現在Djangoでweb開発を勉強しているものです。
参考書を見ながら自分なりの簡単なサービスを開発している最中です。
postsページをint:idをつけてrequest.user.pkと結びつけて個別ページを作成しようと考えていますが、うまく情報を結びつけることができず、NoReverseMatch at /posts/1(pk=1を指定した場合)とエラーが表示されてしまいます。サーバーの方は何もエラーが出ず、作動しています。
下記のviews.pyのプログラムのどこが、なぜ間違っていてるかをお教えていただけたらと思います。
ご教授の程よろしくお願いします。
post.html
html
1<div class="container"> 2 <h1> 3 〇〇さんのページ 4 </h1> 5 <form action="{% url 'posts' post_id %}" method="post"> 6 {% csrf_token %} 7 <p>{{ form.as_p }}</p> 8 <button type="submit">送信</button> 9 </form> 10</div>
views.py
python
1 2from django.shortcuts import render 3from django.shortcuts import redirect 4from django.urls import reverse_lazy 5from .forms import PostForm 6from django.contrib.auth.decorators import login_required 7from .models import Post 8from accounts.models import CustomUser 9 10@login_required 11def createpost(request, post_id): 12 # <int:id>の取得をする 13 post_id = CustomUser.objects.get(pk=post_id) 14 15 if (request.method == 'POST'): 16 # postを作成する 17 pt = Post() 18 pt.post_owner = request.user 19 # page/<int:id>を引っ張ってきてto_userにする 20 pt.to_user = post_id.id 21 pt.content = request.POST['content'] 22 pt.save() 23 return redirect(to='/post/posts') 24 25 # 共通処理 26 params = { 27 'login_user':request.user, 28 'form':PostForm, 29 } 30 31 return render(request, 'post.html', params)
urls.py
python
1from django.urls import path 2from . import views 3 4# app_name = 'post' 5 6urlpatterns = [ 7 path('', views.IndexView, name='index'), 8 path('posts/<int:post_id>', views.createpost, name='posts'), 9]
forms.py
python
1from django.forms import ModelForm 2from .models import Post 3from django import forms 4 5class PostForm(ModelForm): 6 ''' 7 ''' 8 class Meta: 9 ''' 10 Attributes: 11 model: 12 fields: 13 ''' 14 model = Post 15 fields = ['content']
models.py
python
1from django.db import models 2from accounts.models import CustomUser 3 4# Create your models here. 5 6class Post(models.Model): 7 owner = models.ForeignKey( 8 CustomUser, 9 on_delete=models.CASCADE, 10 related_name='post_owner') 11 to_user = models.ForeignKey( 12 CustomUser, 13 on_delete=models.CASCADE) 14 content = models.TextField(max_length=1000) 15 good_count = models.IntegerField(default=0) 16 created = models.DateTimeField(auto_now_add=True) 17 18 def __str__(self): 19 return str(self.content) + ' (' + str(self.to_user) + ')
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。