開発環境は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かと自分では考えています。
どうすれば実装できるのでしょうか。
知恵を貸していただけると嬉しいです。
最後まで読んでくださりありがとうございます。