2015-12-18 33 views
0

不幸的是,我有一個情況,我必須編寫一個原始的SQL查詢。我有一個將有許多多對多關係的模型,我試圖做一個通用函數來在查詢中獲取正確的信息。如何動態獲取多對多關係的連接器表名稱?

每個多對多關係都將沿着shared = models.ManyToManyField(SharedResource)的行設置。在我的原始查詢函數中,我給出了具有此定義的模型,並且需要構建表名稱以進行原始連接。

如何可靠地獲取多對多連接器表名稱?

回答

1

模型的表名可通過Model._meta.db_table獲得,您可以通過Model.field.through獲取M2M字段的直通表。所以,在你的情況下:

MyModel.shared.through._meta.db_table 
+0

你是否確認'_meta'現在是公共API的一部分?它肯定遵循Python的私有API命名約定,但是我認爲*我記得幾個月前在讀一篇文章,他們正在考慮支持'_meta'作爲公共API的一部分。現在是這種情況嗎?如果是這樣,你能提供一個參考嗎?否則,這可能不是一個好建議。 – ray

+0

它是; GSoC的學生在1.8版發佈之前做了很多工作,以實現這一目標。也就是說,並不是所有的屬性都被記錄下來,'db_table'不是。它在1.0之前沒有改變,但我懷疑它很快就會改變。 –

+0

夠公平的。我認爲關於這些細節的「免責聲明」說明應作爲您的迴應的一部分,以確保OP知道他/她正在進入的內容。 – ray

相關問題