2017-01-19 44 views
1

我有以下型號:檢索一個一對多查詢集在Django

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。換句話說,它是一個簡單的一對多(1 RecipientList對許多RecipientListEmails)關係,我想在一個結果集中獲取所有這些信息。

是否有可能在Django中進行迭代而不遍歷RecipientList和單獨查詢RecipientListEmails或編寫自己的SQL連接?

+0

我運行'RecipientListEmail.objects.all()',這就是我得到的。它看起來好像根本沒有加入另一個表:'' –

回答

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_list_id' –

+0

哎呀,我犯了一個錯誤,應該是''recipient_list__pk''不是'recipient__pk''。更新。 – wim