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

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

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

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

Python 3.x

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

Twitter

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

Q&A

解決済

1回答

1528閲覧

Django ソーシャルアカウントとモデルを結びつけたい

退会済みユーザー

退会済みユーザー

総合スコア0

Django

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

Python 3.x

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

Twitter

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

0グッド

0クリップ

投稿2019/03/28 23:51

macにて開発しています

##行ないたいこと
ユーザが作成したメモを表示するサイトを作っています。
ユーザはtwitterのみでログインでき、アカウント一つにつきモデルは一つです。

ここで、
1.twitterアカウントとモデルを結びつける方法
2.uuidをprimarykeyとし、作成されたURLへアクセスする方法を知りたいです。

また、その後は上記のページには誰でもアクセスできるようにし、メモを作成したユーザのみに編集等の作業ができるようにする予定です。

##これまでに行なった作業
1.メモ用のモデル作成

python

1import uuid 2from django.db import models 3 4#画像を複数投稿させるための処理 5def get_memo_image_path(instance, filename): 6 return 'image-{0}/{1}'.format(instance.id, filename) 7 8 9class Memo(models.Model): 10 id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) 11 title = models.CharField(max_length=20) 12 content = models.TextField(max_length=5000) 13 image = models.ImageField(upload_to=get_memo_image_path, null=True, blank=True) 14 posted_date = models.DateTimeField(auto_now=True)

2.social-auth-app-djangoによるtwitterログイン機能の実装
こちらを真似て作りました。

3.url.py とviewなど

python

1urlpatterns = [ 2 path('', IndexView.as_view(), name="index"), 3 path('<uuid:pk>', MemoDetailView.as_view(), name="detail"), 4 path('<uuid:pk>/update', MemoUpdateView.as_view(), name="update"), 5 path('<uuid:pk>/delete', MemoDeleteView.as_view(), name="delete"), 6 7 path('create/', MemoCreateView.as_view(), name="create"), 8 path('admin/', admin.site.urls), 9 path('', include('social_django.urls')), 10] 11urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

以上になります。
一部、または検索用にキーワードを教えていただくだけでも助かります。
よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

おそらく、抱えられているすべての課題を teratail のひとつの質問で解決しようとすると(回答者にとって)大変なので、個別にひとつずつ解決していかれるのがよいのではないかと思います。

以下、私が理解した各課題についてざっくりとだけコメントさせていただきますね。

  • a) Twitter アカウントでログインできるユーザモデルを作る
  • b) Memopk を uuid で作る
  • c) Memo とユーザモデルを 1:1 でひもづける
  • d) Memo を作成したユーザのみ編集できるようにする
  • e) uuid を URL に含めた形で Memo のページにアクセスできるようにしたい

a) Twitter アカウントでログインできるユーザモデルを作る

→ 「作りました」とのことですので、特に問題なさそうですね。実際に問題が出てきて自力で解決が難しいときに改めて質問されるとよいのではないでしょうか。

b) Memopk を uuid で作る

→ こちらも特に問題ない、です、よね?

c) Memo とユーザモデルを 1:1 でひもづける

→ Django コアに OneToOneField というものがあるのでこれを使うとよいでしょう。

https://docs.djangoproject.com/en/2.1/ref/models/fields/#django.db.models.OneToOneField

d) Memo を作成したユーザのみ編集できるようにする

Memo に「ユーザモデルを参照する ForeignKey フィールド」を追加して、 Memo の編集ページを作り、そこに「関連するユーザでの権限チェック」を追加されるとよいかと思います。

https://docs.djangoproject.com/en/2.1/ref/models/fields/#django.db.models.ForeignKey

e) uuid を URL に含めた形で Memo のページにアクセスできるようにしたい

→ こちらは現状何が問題ですか?

一部、または検索用にキーワードを教えていただくだけでも助かります。

キーワードというわけではありませんが、 Django 公式の topics にひととおり目を通すだけでも、基本的なところでつまづくことはぐっと減ります。英語に抵抗がなければおすすめです。

https://docs.djangoproject.com/en/2.1/topics/

投稿2019/03/29 08:21

gh640

総合スコア1407

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

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

退会済みユーザー

退会済みユーザー

2019/03/29 17:33

回答ありがとうございます。現在、教えていただいた内容を実践している最中です。 そこで加えてお聞きしたいことがあります。 ユーザはたった一つだけメモを作成できる仕様で、ForeignKeyは必要になるのでしょうか?(上記記述が不十分だったかもしれませんごめんなさい) 1対多の時に書くものとあったので聞いてみようと思いました。 OneToOneFieldについては上記のmodelに user = models.OneToOneField(User, on_delete=models.CASCADE) を付け加える形にしようと考えています。(認識はあっていますでしょうか?) いくつも何度もすみません。教えていただけると幸いです。
gh640

2019/03/30 01:28

> ユーザはたった一つだけメモを作成できる仕様で、ForeignKeyは必要になるのでしょうか?(上記記述が不十分だったかもしれませんごめんなさい) あ、確かに、そうですよね。。 `ForeignKey` は必要ないと思います。すみません、回答を書いているうちに、「モデル」と `Memo` が同じものを指すということを忘れて書いてしまいました。 おっしゃるとおり `OneToOneField` をひとつ追加する形でバッチリだと思います。私も同じ認識を持っています。
退会済みユーザー

退会済みユーザー

2019/03/30 01:50

ありがとうございます! もう少し頑張ってみます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問