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

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

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

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

Python 3.x

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

Q&A

2回答

1309閲覧

urlにusernameを含ませたい

kenpi

総合スコア7

Django

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

Python 3.x

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

0グッド

0クリップ

投稿2019/04/09 09:56

編集2019/04/11 03:50

開発環境はMac python3 Django2.1です。

ユーザを
CreateViewで入力→DetailViewで入力内容を表示
と遷移させるようにします。
この時、detailのurlにusernameを含ませたいです。

また、social-auth-app-djangoでのtwitter認証を考えています。
twitterのusernameをそのまま使う形です。

調べながらなんとなくで書いてみましたが、思う結果が得られない現状です。理解が浅いです。

Page not found (404) Request Method: POST Request URL: http://127.0.0.1:8000/create/ Raised by: example.views.ExampleCreateView

以下にコードを載せます。

#models.py from django.contrib.auth import get_user_model from django.db import models class Social(models.Model): user = models.ForeignKey(get_user_model(), related_name='socials', on_delete=models.CASCADE) provider = models.CharField(max_length=32) uid = models.CharField(max_length=255) class Meta: unique_together = ('provider', 'uid') db_table = 'socials' class Example(models.Model): user = models.OneToOneField(get_user_model(), on_delete=models.CASCADE) title = models.CharField(max_length=20) content = models.TextField(max_length=500)

Socialモデルでは同じTwitterアカウントが別のレコードで保存されないようにしているつもり。
ExampleモデルはUserモデルと一対一の関係になるようにしているつもり。
models.pyは以上ですべての記述です。
以下のコードは必要だと思うことのみ書きます。

#veiws.py の一部 class ExampleDetailView(DetailView): model = Example class ExamplesCreateView(CreateView): model = Example form_class = ExampleForm def get_success_url(self): id_object = get_object_or_404(get_user_model(), username=self.kwargs.get("username")) return reverse_lazy('detail', kwargs={'username': id_object})
#urls.pyの一部 urlpatterns = [ path('<slug:username>', ExampleDetailView.as_view(), name="detail"), path('create/', ExampleCreateView.as_view(), name="create"), ]

modelの書き方が悪いか、CreateViewかと自分では考えています。
どうすれば実装できるのでしょうか。
知恵を貸していただけると嬉しいです。
最後まで読んでくださりありがとうございます。

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

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

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

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

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

gh640

2019/04/10 06:33

「思う結果が得られない」というのはどういう状況かをもう少し具体的にご説明されると、具体的なヒント・回答がもらえやすくなると思います。例えば、「〇〇をしたときに、〇〇となってほしいのですが、実際には〇〇となります。(もしエラーが出ているのであれば)エラーメッセージは次のとおりです。」というような感じでしょうか。
guest

回答2

0

補足します。
こちら、検証済みです。Django2.1系で動くはずです。

python

1(view.py) 2class UserDetail(generic.DetailView): 3 model = User 4 slug_field = "username" 5 slug_url_kwarg = "username" 6 template_name = 'app/user_detail.html' 7 8 def get_object(self): 9 object = get_object_or_404(User, username=self.kwargs.get("username")) 10 if self.request.user.username == object.username: 11 return object 12 else: 13 print("you are not the owner!!") 14 15 16class UserUpdate(OnlyYouMixin, generic.UpdateView): 17 model = User 18 form_class = UserUpdateForm 19 template_name = 'app/user_form.html' 20 21 def get_object(self): 22 object = get_object_or_404(User, username=self.kwargs.get("username")) 23 if self.request.user.username == object.username: 24 return object 25 else: 26 print("you are not the owner!!") 27 28 def get_success_url(self): 29 messages.info(self.request, f'ユーザー情報を更新しました。') 30 return resolve_url('app:index')

python

1(urls.py) 2 path('user_detail/<slug:username>/', views.UserDetail.as_view(), name='user_detail'), 3 path('user_update/<slug:username>/', views.UserUpdate.as_view(), name='user_update'),

UserDetailへのリンク例

html

1<a href="{% url 'app:user_detail' user.username %}">ユーザー情報</a>

UserUpdateへのリンク例

html

1<a href="{% url 'app:user_update' user.username %}">ユーザー情報の編集</a>

投稿2019/07/02 09:30

ak_suzuki

総合スコア194

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

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

0

py

1#urls.pyの一部 2urlpatterns = [ 3 path('<str:username>', ExampleDetailView.as_view(), name="detail"), 4 path('create/', ExampleCreateView.as_view(), name="create"), 5]

ExampleList.htmlなどからExampleDetailにアクセスするとき

html

1{% for item in example_list %} 2 <a href="{% url 'app:detail' item.username %}"> 3{% endfor %}

でどうでしょう?

投稿2019/06/11 07:31

ak_suzuki

総合スコア194

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問