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

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

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

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

Python 3.x

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

関数型プログラミング

関数型プログラミングとは、関数を用いて演算子を構築し、算出し、コンピュータプログラムを構成する枠組みです。

Q&A

1回答

2407閲覧

【django】リクエストで受け取ったipアドレスをdbに保存する方法を教えて下さい。

nre

総合スコア35

Django

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

Python 3.x

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

関数型プログラミング

関数型プログラミングとは、関数を用いて演算子を構築し、算出し、コンピュータプログラムを構成する枠組みです。

0グッド

0クリップ

投稿2020/11/05 02:38

編集2020/11/05 10:00

【実現したい事】
ボタンを押したユーザーのipアドレスをLikeモデルに次々と追加して行きたいです。

詳細ページに設置しているボタンを連打されない様に、
押したユーザーのipアドレスを取得し一度押した事がある人は押せない様にしようと考えております。

django

1#views.py 2''' ボタンを押すと同時にip_addressを取得しております''' 3from ipware import get_client_ip 4 5def like(request, pk): 6 ip_address = get_client_ip(request)#押したユーザーのipアドレス取得までは成功しております。 7 8 ine = Like.objects.create(ip_address=ip_address, user=user) 9 ine.save()

django

1#models.py 2 3''' Likeモデルはカスタムユーザーモデル(AbstractBaseUser)に紐付いております''' 4class Like(models.Model): 5 user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE) 6 like_num = models.IntegerField(default=0) 7 ip_address = models.CharField('IPアドレス', max_length=20) 8 9 def __str__(self): 10 return self.ip_address 11

django

1エラーコード 2ine = Like.objects.create(ip_address=ip_address, user=user) 3NameError: name 'user' is not defined 4

【その他詳細】
djangoのバージョンは3.1でpython3です。

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

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

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

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

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

guest

回答1

0

NameError: name 'user' is not defined
とあるように

def like(request, pk): ip_address = get_client_ip(request)#押したユーザーのipアドレス取得までは成功しております。 ine = Like.objects.create(ip_address=ip_address, user=user)

ineに格納するまでにuserを取得していないように思います。
プログラムからするとuserの定義ないやんけって言ってるだけではないでしょうか

投稿2020/11/06 03:15

sk-sora--ypi

総合スコア528

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

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

nre

2020/11/06 06:45

大変お忙しい中、ご回答して頂き誠にありがとうございます。 ip_address = の下にuser = request.userとしてユーザー情報を取得して代入して見たのですが、「Cannot assign "<SimpleLazyObject: <django.contrib.auth.models.AnonymousUser object at 0x10e670450>>": "Like.user" must be a "User" instance.」というエラーが出ます。 貴方の意図する事と違う事をしてしまっていますでしょうか? ご教示して頂けましたら幸いです。
sk-sora--ypi

2020/11/06 07:04

エラーメッセージが変わったということは上記が解決し、実際にlikeを作成しようとしてエラーが発生したということです。 生憎私がForeignKeyを使ったユーザー参照を使ったことがないのでわかりかねますが、 https://djangobrothers.com/blogs/referencing_the_user_model/ このリンクを上から順にやってみてはいかがでしょうか。 気になるところは、リンクの下の方の >>> from django.contrib.auth import get_user_model >>> user = get_user_model() >>> user <class 'django.contrib.auth.models.User'> となっているところが <django.contrib.auth.models.AnonymousUser object at 0x10e670450> と参照先が変化しているのが気になりますが、 リンク先をやっていけばいけるのではないでしょうか。 これ以上知識がないため協力ができないので、 再び問題が発生するようであれば新たな質問を投稿することをお勧めします。
nre

2020/11/06 07:54

リンクまで記載して頂き誠にありがとうございます。 リンクを拝見し挑戦してみます。 また、再度、ご助言して頂き誠にありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問