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

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

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

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

Python

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

Q&A

解決済

2回答

2170閲覧

クエリセットから特定の値を指定し、モデルクラスからデータを取得する方法

study_111

総合スコア82

Django

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

Python

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

0グッド

0クリップ

投稿2020/07/24 10:56

編集2020/07/24 10:59

前提・実現したいこと

外部キーにより、紐づいているカラムの値全てを取得したいです。

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

カラムに特定の値(hello world) を持つ、TestAクラスのidを指定し、TestB.objects.get(id=test_text.id)このような形で、紐づいているカラムのデータを取得したいと考えていたのですが、以下のようにエラーが出力されてしまいます

AttributeError: 'QuerySet' object has no attribute 'id'

上記のエラーが出力されてしまったのですが、「id」が自動採番されていなかった可能性も考え、「id」の部分を「test_text.text」としましたが、同様のエラーが表示されてしまいました。

該当のソースコード

以下は、models.pyです

class TestA(models.Model): text = models.CharField(max_length=2048,unique=True) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) def __str__(self): return self.text class TestB(models.Model): check = models.BooleanField(default=False,) data = models.BooleanField(default=False,) test_a = models.ForeignKey(TestA,on_delete=models.CASCADE)

以下はViwes.pyです

def result(request): test_text = TestA.objects.filter(text__iexact='hello world') if test_text: result = TestB.objects.get(id=test_text.id)

試したこと

参考にした記事はQiitaDjangoチュートリアルです。

どなたか、ご助言頂けましたら幸いです

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

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

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

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

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

guest

回答2

0

Python

1def result(request): 2 test_text = TestA.objects.filter(text__iexact='hello world') 3 if test_text: 4 result = TestB.objects.filter(id__in=[i.id for i in test_text]) 5```みたいな感じですか?

投稿2020/07/25 06:16

ForestSeo

総合スコア2720

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

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

study_111

2020/07/25 15:31

ご回答ありがとうございます。 クエリセットが何か分かっていなかったのですが、for文により、中身を取り出すことが出来るのですね。 大変勉強になりました。
guest

0

ベストアンサー

下記のようにすれば、test_aを記録しているTestBのモデルクラスを取得できます。
なお、下記test_b_qsはクエリセットで、TestBモデルインスタンスのコレクションです。

python

1test_a = TestA.objects.get(text='hello world') 2test_b_qs = TestB.objects.filter(test_a=test_a)

投稿2020/07/25 03:14

hasami

総合スコア1277

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

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

study_111

2020/07/25 15:29

ご回答頂きまして、ありがとうございます。 「filter」の条件式に、オブジェクトを指定し、外部キーで関連づいているオブジェクトを呼び出すことが出来るのですね。勉強になりました。 今回は、ご親切にもご回答のお願いに応えて下さり、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問