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

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

ただいまの
回答率

89.24%

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 371
退会済みユーザー

退会済みユーザー

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)
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • gh640

    2019/03/31 16: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 16: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 11:07

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

    キャンセル

回答 1

checkベストアンサー

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) については、例えば次のようにするイメージです。

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

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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 89.24%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる