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

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

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

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

13390閲覧

Djangoでtype object 'Group' has no attribute 'objects'

kazu1125

総合スコア10

Django

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/06/05 04:43

編集2019/06/05 04:49

前提・実現したいこと

初めて質問させていただきます。python, Djangoの初心者です。

Groupモデルを作成して、Groupの中にあるグループ名をGroup.objects.filterで引っ張ってきたいのですが、
ローカル環境からアクセスしてもtype object 'Group' has no attribute 'objects'というエラーが発生します。

発生している問題・エラーメッセージ

下記はgoogle chromでlocalhost:8000でアクセスした時に表示されているエラーです

AttributeError at /sns/groups type object 'Group' has no attribute 'objects' Request Method: GET Request URL: http://localhost:8000/sns/groups Django Version: 2.2.1 Exception Type: AttributeError Exception Value: type object 'Group' has no attribute 'objects'

該当のソースコード

____________________________________________ #forms.py from django import forms from.models import Message,Group,Friend,Good from django.contrib.auth.models import User #Groupの選択メニューフォーム作成 class GroupSelectForm(forms.Form): def __init__(self, user, *args, **kwargs): super(GroupSelectForm, self).__init__(*args, **kwargs) self.fields["groups"] = forms.ChoiceField( choices = [("-", "-")] + [(item.title, item.title) for item in Group.objects.filter(owner = user)], ) __________________________________________ #models.py from django.db import models from django.contrib.auth.models import User #Groupクラス class Group(models.Model): owner = models.ForeignKey(User, on_delete=models.CASCADE, related_name="group_owner") title = models.CharField(max_length=100) def __str__(self): return self.title __________________________________________

試したこと

Groupモデルでモデルの追加(adminにアクセスして追加)や、周辺や関連コードの打ち間違えの確認などしましたが、変わらずエラーが出ております。

また調べていると、objectsはモデルクラスを生成すると自動的に用意してくれる属性だと書いてありました。
従って、Groupモデルにobjects属性が無い、ということはGroupがモデルとして認識されてないのでしょうか?もしくはobjectsを属性として認識させるためには何か別の作業が必要なのでしょうか?

補足情報(FW/ツールのバージョンなど)

python3.7

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

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

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

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

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

guest

回答1

0

ベストアンサー

django.db.models.Model を継承して作成した model クラスには通常は objects 属性がついているはずです。 objects を属性として認識させるために追加で作業すべきこと等は特にありません。

となると、何が原因かなのですが、パッと見で可能性がありそうなのは、 forms あるいは __init__() の中で Group という名前を上書きしてしまっているか、 model 以外の別のクラスにも Group という名前を付けられていてそれが衝突している、といったところでしょうか。

もしどちらも心当たりが無ければ、 manage.py shell でインタラクティブコンソールを開いて(これが何を言っているのかおわかりにならない場合はググってみてください。すぐに答えが見つかるかと思います)、該当する view 以外のところで Group.objects が使えるかどうかを確認されると、問題の切り分けが進むと思います。

python

1# myapp のところは実際の app 名に変更してください 2from myapp.models import Group 3 4# `objects` が利用できるかどうかを確認 5groups = Group.objects.all()

ご参考になるでしょうか。

投稿2019/06/05 05:00

gh640

総合スコア1407

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

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

kazu1125

2019/06/05 05:35

ありがとうございます。 ひとまず、インタラクティブコンソールでGroup.objectsが使えるかどうか確かめたところ、しっかりと登録したグループが2つ出てきました。 つまり、Group.objectsは使えるようです。 In [4]: from sns.models import Group In [5]: groups = Group.objects.all() In [6]: print(groups) <QuerySet [<Group: public>, <Group: team A>]> するとどこが問題なのか、ということですが、「Groupが上書きされてしまったのか」確認します。 「model 以外の別のクラスにも Group という名前を付けられていてそれが衝突している」、についてはmodels.pyにGroupというクラスを重複していないか?ということでしょうか?_
kazu1125

2019/06/05 05:42

解決しました!! ご指摘の通り、forms.pyでGroupが上書きされておりました。 クラス名で「GroupForm」と記述してフォームを作成したいところを、「Group」としておりました。 ありがとうございました。 また別のエラーが発生しましたが、同じようなエラーなので、まずは自力で対処してみます
gh640

2019/06/05 05:46

コメントお戻しくださりありがとうございます。 `Group.objects` は使えるらしい、とのことですね。 > 「model 以外の別のクラスにも Group という名前を付けられていてそれが衝突している」、についてはmodels.pyにGroupというクラスを重複していないか?ということでしょうか?_ 私が言わんとしていたのは、例えば、 `utils.py` といった別のモジュールの中に別の `Group` クラスを定義していて、それを `views.py` の中で import してしまっている、というようなパターンのことでした。 ……とコメントお返ししようとしましたが、ご解決されましたね笑 速い! よかったです。別のエラー、がんばってみてください :)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問