2017-01-19 12 views
1

で1対多のクエリセットを取得します。私は何をしようとしているは、私は次のモデル持っジャンゴ

class RecipientList(models.Model): 
    name = models.CharField(max_length=255) 
    list_type = models.CharField(max_length=255) 
    status = models.CharField(max_length=255) 

class RecipientListEmail(models.Model): 
    email = models.CharField(max_length=255) 
    recipient_list = models.ForeignKey(RecipientList, on_delete=models.DO_NOTHING) 

をすべてRecipientListsを取得し、各受信者のリストについては、私はセットを取得したいのですがありますRecipientListEmailsが関連付けられています。言い換えれば、それは単純な一対多(RecipientList to many RecipientListEmails)の関係であり、この情報をすべて1つの結果セットで取得したいと考えています。

RecipientListを繰り返し処理せずにRecipientListEmailsを個別に照会したり、独自のSQL結合を作成することなく、Djangoで行うことはできますか?

+0

私は 'RecipientListEmail.objects.all()'を実行しました。これが私のものです。 ' ' –

答えて

1

これは1つのクエリです。希望するマッピングですか?

output = collections.defaultdict(list) 
values = RecipientListEmail.objects.values_list('recipient_list__pk', 'email') 
for recipient_id, email in values: 
    output[recipient_id].append(email) 
+0

このコードは私にエラーを与えています:' FieldError:キーワード' recipient 'をフィールドに解決できません。選択肢は:email、id、recipient_list、recipient_list_id' –

+0

おっと、私はエラーを起こしました。それは 'recipient_list__pk''ではなく' recipient__pk''でした。更新しました。 – wim

関連する問題