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

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

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

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

Python 3.x

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

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Q&A

解決済

1回答

552閲覧

twitter認証時の no such column: user_id を解決したい

退会済みユーザー

退会済みユーザー

総合スコア0

Django

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

Python 3.x

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

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

0グッド

0クリップ

投稿2019/03/31 02:08

編集2019/04/03 02:04

macにて開発しています

social-auth-app-djangoにてtwitter認証を実装したいのですが、ログインボタンを押すと以下のエラーが発生します。

OperationalError at /create/ no such column: user_id
以下にはmodel.pyを載せます。
OneToOneFieldをmodelに追加するまではうまくできていたと思うのですが(おそらく)
ここが原因なのでしょうか?

import uuid from django.conf import settings from django.db import models #画像添付のための処理 def get_memo_image_path(instance, filename): return 'image-{0}/{1}'.format(instance.id, filename) class Memo(models.Model): user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) title = models.CharField(max_length=20) content = models.TextField(max_length=5000) image = models.ImageField(upload_to=get_memo_image_path, null=True, blank=True) posted_date = models.DateTimeField(auto_now=True)

どこを載せればいいのかわからないので、必要な要素を言っていただければ追記します。

現在は、解決策がよくわからない状態でいます。
助けていただけると嬉しいです。
よろしくお願いします。

ーーーーー追記ーーーーーー
エラーコードとurls.pyを追記します。アプリ名の部分は変更記述しています。
また、自身の中でOneToOneFieldに原因があるように思えてしまっていて、モデル同士の紐付けができていないのかなと考えています。
この記事にあるように何か記述が必要なのでしょうか?今回はソーシャル認証なのでどう参考になるかも曖昧なのですが…。

Environment: Request Method: POST Request URL: http://127.0.0.1:8000/create/ Django Version: 2.1.7 Python Version: 3.7.0 Installed Applications: ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'App.apps.AppConfig', 'social_django'] Installed Middleware: ['django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware'] Traceback: File "/Users/username/PycharmProjects/project/venv/lib/python3.7/site-packages/django/db/backends/utils.py" in _execute 85. return self.cursor.execute(sql, params) File "/Users/username/PycharmProjects/project/venv/lib/python3.7/site-packages/django/db/backends/sqlite3/base.py" in execute 298. return Database.Cursor.execute(self, query, params) The above exception (no such column: user_id) was the direct cause of the following exception: File "/Users/username/PycharmProjects/project/venv/lib/python3.7/site-packages/django/core/handlers/exception.py" in inner 34. response = get_response(request) File "/Users/username/PycharmProjects/project/venv/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response 126. response = self.process_exception_by_middleware(e, request) File "/Users/username/PycharmProjects/project/venv/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response 124. response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/Users/username/PycharmProjects/project/venv/lib/python3.7/site-packages/django/views/generic/base.py" in view 68. return self.dispatch(request, *args, **kwargs) File "/Users/username/PycharmProjects/project/venv/lib/python3.7/site-packages/django/contrib/auth/mixins.py" in dispatch 52. return super().dispatch(request, *args, **kwargs) File "/Users/username/PycharmProjects/project/venv/lib/python3.7/site-packages/django/views/generic/base.py" in dispatch 88. return handler(request, *args, **kwargs) File "/Users/username/PycharmProjects/project/venv/lib/python3.7/site-packages/django/views/generic/edit.py" in post 172. return super().post(request, *args, **kwargs) File "/Users/username/PycharmProjects/project/venv/lib/python3.7/site-packages/django/views/generic/edit.py" in post 142. return self.form_valid(form) File "/Users/username/PycharmProjects/project/venv/lib/python3.7/site-packages/django/views/generic/edit.py" in form_valid 125. self.object = form.save() File "/Users/username/PycharmProjects/project/venv/lib/python3.7/site-packages/django/forms/models.py" in save 458. self.instance.save() File "/Users/username/PycharmProjects/project/venv/lib/python3.7/site-packages/django/db/models/base.py" in save 718. force_update=force_update, update_fields=update_fields) File "/Users/username/PycharmProjects/project/venv/lib/python3.7/site-packages/django/db/models/base.py" in save_base 748. updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields) File "/Users/username/PycharmProjects/project/venv/lib/python3.7/site-packages/django/db/models/base.py" in _save_table 812. forced_update) File "/Users/username/PycharmProjects/project/venv/lib/python3.7/site-packages/django/db/models/base.py" in _do_update 861. return filtered._update(values) > 0 File "/Users/username/PycharmProjects/project/venv/lib/python3.7/site-packages/django/db/models/query.py" in _update 712. return query.get_compiler(self.db).execute_sql(CURSOR) File "/Users/username/PycharmProjects/project/venv/lib/python3.7/site-packages/django/db/models/sql/compiler.py" in execute_sql 1383. cursor = super().execute_sql(result_type) File "/Users/username/PycharmProjects/project/venv/lib/python3.7/site-packages/django/db/models/sql/compiler.py" in execute_sql 1065. cursor.execute(sql, params) File "/Users/username/PycharmProjects/project/venv/lib/python3.7/site-packages/django/db/backends/utils.py" in execute 100. return super().execute(sql, params) File "/Users/username/PycharmProjects/project/venv/lib/python3.7/site-packages/django/db/backends/utils.py" in execute 68. return self._execute_with_wrappers(sql, params, many=False, executor=self._execute) File "/Users/username/PycharmProjects/project/venv/lib/python3.7/site-packages/django/db/backends/utils.py" in _execute_with_wrappers 77. return executor(sql, params, many, context) File "/Users/username/PycharmProjects/project/venv/lib/python3.7/site-packages/django/db/backends/utils.py" in _execute 85. return self.cursor.execute(sql, params) File "/Users/username/PycharmProjects/project/venv/lib/python3.7/site-packages/django/db/utils.py" in __exit__ 89. raise dj_exc_value.with_traceback(traceback) from exc_value File "/Users/username/PycharmProjects/project/venv/lib/python3.7/site-packages/django/db/backends/utils.py" in _execute 85. return self.cursor.execute(sql, params) File "/Users/username/PycharmProjects/project/venv/lib/python3.7/site-packages/django/db/backends/sqlite3/base.py" in execute 298. return Database.Cursor.execute(self, query, params) Exception Type: OperationalError at /create/ Exception Value: no such column: user_id

以下にurls.py

from django.contrib import admin from django.conf import settings from django.conf.urls.static import static from django.urls import include, path from memo.views import IndexView, MemoDetailView, MemoCreateView, MemoUpdateView, MemoDeleteView urlpatterns = [ path('', IndexView.as_view(), name="index"), path('<uuid:pk>', MemoDetailView.as_view(), name="detail"), path('<uuid:pk>/update', MemoUpdateView.as_view(), name="update"), path('<uuid:pk>/delete', MemoDeleteView.as_view(), name="delete"), path('create/', MemoCreateView.as_view(), name="create"), path('admin/', admin.site.urls), path('', include('social_django.urls', namespace='social')) ] urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

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

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

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

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

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

gh640

2019/03/31 07:40

`social-auth-app-django` の公式ドキュメントにある Django の設定方法の説明 ↓ のとおりに設定されてエラーが出たという状況ですか? https://python-social-auth.readthedocs.io/en/latest/configuration/django.html もし公式ドキュメントのとおりにされていないのであれば、まずは公式ドキュメントに沿って忠実にやってみられると、 `social-auth-app-django` の問題なのか、作成されているプロジェクトの問題なのかの切り分けができるかと思います。
gh640

2019/03/31 07:47

> どこを載せればいいのかわからないので、必要な要素を言っていただければ追記します。 以下のものをご提示になると、具体的な指摘・回答をもらえる可能性が高まると思います。 - `settings.ROOT_URLCONF` のファイルの中身 - (もしユーザモデルを自作されているのであれば)ユーザモデルの app の `models.py` ・ `views.py` ・ `urls.py` - `settings.py` の中の `social-auth-app-django` 関連の設定値の値 - スタックトレースを含んだエラーメッセージ一式( `OperationalError at /create/ no such column: user_id` だけだとコメントしづらいです) (とはいえ、ご提示されても回答がもらえない可能性もあるので、その場合はすみません)
退会済みユーザー

退会済みユーザー

2019/04/03 02:07

返信が遅れてしまい申し訳ありません。 ご意見を参考に、まずは自身で取り組みましたが、解決の目処が立たず追記致しました。 再び見て頂けると助かります。
guest

回答1

0

ベストアンサー

ログインボタンを押すと以下のエラーが発生します

とおっしゃっていますが、エラーメッセージにはパス /create に対して云々ということが書かれているので、実際のエラーは MemoCreateView の処理の途中で出ているのかなとお見受けしました。

実際には、エラーは social_django の中の処理か、ご自身で作られた MemoCreateView の処理か、どちらで起こっているのでしょう?

それとも、(一見別々のものに見えますが)ログイン処理と MemoCreateView が密接に結びついている感じでしょうか?

いまご提示されている情報だけでは状況が正確にわからないので、問題の切り分け・問題解決につながるヒントだけお出しさせていただきますね。

  • a) カスタムモデルを作られた後に migration は適切に済ませられていますか? no such column というメッセージから、 DB のテーブルの構成が適切な形になっていないのではないか、と想像します(これはお考えの「モデル同士の紐付けができていない」のパターンに該当します)。もし適切な状態になっていない場合は makemigrations migrate 等のコマンドを適切に実行する必要があるかと思います。状況がよくわからなくなってカオスになってしまっている場合は DB をゼロから作り直すのが近道ですのでご検討ください。
  • b) model と view の作成・デバッグを同時にしていると問題の切り分けが難しいので、 manage.py shell 等を使って、まずは model が期待通りに作成できるかどうかの確認をされるとよいかと思います。もし model が期待通りに作れるのであれば問題の原因は view 、作れなければ model 、と絞り込めるかと思います。
  • c) (繰り返しになりますが)もし social-auth-app-django の利用が初めてあるいはまだ不慣れでいらっしゃるのであれば、まずは公式ドキュメントに沿って実装してみて、正しい使い方を学んでから応用に挑戦されるのが近道かと思います。

b) については、例えば次のようにするイメージです。

bash

1python manage.py shell 2>>> from django.contrib.auth import get_user_model 3>>> # create_user() の引数はサンプルです。モデルにあわせて適切にセットしてください。 4>>> user = get_user_model().objects.create_user('taro', password='tarohainudayo') 5>>> user.save() 6>>> from myapp.models import Memo 7>>> # create() の引数はサンプルです。適切にセットしてください。 8>>> m1 = Memo.objects.create(user=user, title='...', ...) 9>>> m1.save()

このような処理が問題なくできれば user の作成、 memo の作成についてはある程度問題なく動いているとみなしてよいのではないでしょうか。

もし、このあたりの説明に対して「全然ピンと来ないぞ」という感じであれば、 Django の基礎が不足している、ような、気もします。基礎をもう少し固めてから臨まれてもよいのかなと思います。

すでにチェックされているかと思いますが、公式の Customizing authentication in Django を改めて熟読されてもよいかもしれません。

ご参考になさってください。

投稿2019/04/10 06:28

gh640

総合スコア1407

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問