質問するログイン新規登録
Django

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

Python 3.x

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

Q&A

解決済

1回答

600閲覧

str型のpkをdetailのurlに使う方法

shunhamm

総合スコア22

Django

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

Python 3.x

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

0グッド

0クリップ

投稿2022/09/12 05:44

編集2022/09/12 05:52

0

0

前提

Djangoでデータベースから取得したIDによって詳細ページを表示するwebページを作成しています。
その途中でPKがstr型だからと思われるエラーに直面し、正常に詳細ページを表示出来ない状態です。

実現したいこと

  • [pkをmodelで設定した文字列にする]

発生している問題・エラーメッセージ

File " ---- /venv/lib/python3.9/site-packages/django/db/models/fields/__init__.py", line 2020, in get_prep_value raise e.__class__( ValueError: Field 'id' expected a number but got '(Inputされた文字列)'. [12/Sep/2022 14:17:06] "GET /detail/(Inputされた文字列)/ HTTP/1.1" 500 132731

イメージ説明

該当のソースコード

python:views.py

1class TicketList(ListView): 2 template_name = "ticketlist/ticket_list.html" 3 model = TicketList 4 context_object_name = "tickets" 5 6class TicketDetail(DetailView): 7 template_name = "ticketlist/ticket_detail.html" 8 model = TicketList 9 queryset = User.objects.all() 10 context_object_name = "ticket"

python:urls.py

1urlpatterns = [ 2 path("", TicketList.as_view(), name="list"), 3 path("detail/<str:pk>/", TicketDetail.as_view(), name="detail") 4]

python:models.py

1class TicketList(models.Model): 2 ticket_id = models.CharField(primary_key=True, max_length=100)

python:ticket_list.html

1{% for ticket in tickets %} 2 <tr> 3 <td><a href="detail/{{ ticket.ticket_id }}">{{ ticket.ticket_id }}</a></td>

お分かりの方いらっしゃいましたらご指導よろしくお願いいたします。

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

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

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

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

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

sk-sora--ypi

2022/09/12 10:43

ブログ先はstrではなくuuidでしたが、同じような現象に思えます。 get_objectを定義して具体的なticketを取り出してあげてみてはいかがでしょうか。 https://www.valentinog.com/blog/detail/
shunhamm

2022/09/20 04:46

ご指摘ありがとうございます。 この記事を確認した結果オブジェクトがうまく取得出来ていないらしいことに気がつけました^^ 別の記事を参考にしたのですが、 slug_field = "ticket_id" slug_url_kwarg = "ticket_id" を設定することでオブジェクトと、urlsでpkの代わりにticket_idを指定し、解決出来ました。
guest

回答1

0

自己解決

別の記事を参考にしたのですが、
slug_field = "ticket_id"
slug_url_kwarg = "ticket_id"
を設定することでオブジェクトと、urlsでpkの代わりにticket_idを指定し、解決出来ました。

投稿2022/09/20 04:47

shunhamm

総合スコア22

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問