前提
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>
お分かりの方いらっしゃいましたらご指導よろしくお願いいたします。
ブログ先はstrではなくuuidでしたが、同じような現象に思えます。
get_objectを定義して具体的なticketを取り出してあげてみてはいかがでしょうか。
https://www.valentinog.com/blog/detail/
ご指摘ありがとうございます。
この記事を確認した結果オブジェクトがうまく取得出来ていないらしいことに気がつけました^^
別の記事を参考にしたのですが、
slug_field = "ticket_id"
slug_url_kwarg = "ticket_id"
を設定することでオブジェクトと、urlsでpkの代わりにticket_idを指定し、解決出来ました。

回答1件
あなたの回答
tips
プレビュー