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

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

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

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

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Python

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

Q&A

解決済

1回答

2276閲覧

Djangoでrequest.user.pkとページの<int:pk>を結びつける方法

tenten0114

総合スコア2

Django

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

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Python

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

0グッド

0クリップ

投稿2021/11/17 17:15

現在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) + ')

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

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

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

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

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

guest

回答1

0

自己解決

htmlの記述が間違っていました。views.pyでpkを取得したレコードの変数をparamsに指定して、そこの引数からformのurlを取得したらエラーが消えて、無事動作しました。ありがとうございました。

投稿2021/11/17 22:49

tenten0114

総合スコア2

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問