2 回答

TA貢獻(xiàn)1887條經(jīng)驗(yàn) 獲得超5個(gè)贊
從您的問(wèn)題中不清楚這些是否完全是任意的“這些字段的任何組合都可能存在”,是否存在可以使可能的組合更容易處理的子集,或者甚至是否預(yù)定義了完整的可能字段集,但您可能至少有以下選擇之一。
編寫(xiě)一個(gè)包含所有可能字段的單個(gè) User 類(或用戶配置文件類),其中的字段可能位于一個(gè)用戶上,但不能在另一個(gè)用戶上設(shè)置為
null=True
.有多個(gè)用戶類型擴(kuò)展用戶(或其超類之一)具有不同的字段。
在查詢單個(gè)用戶模型時(shí),編寫(xiě)一個(gè)自定義管理器來(lái)(昂貴地)解壓 JSON 或其他多值字段,以從查詢中手動(dòng)刪除自定義字段并將它們應(yīng)用于初步結(jié)果集。
將用戶配置文件模型鏈接到您的 User 類,然后將其子類化以添加可能字段的各種組合。
繼承可以把這種情況變成一種真正的痛苦,所以這是我會(huì)避免的......對(duì)于你描述的情況,我認(rèn)為 #1 可能是最合適的。如果null=True
不適合您的用例,您的選項(xiàng)就會(huì)變得不那么可口、可讀和可維護(hù)。
注意:@henriquesalvaro 的答案是在我寫(xiě)這篇文章時(shí)提出的,似乎優(yōu)于以下選項(xiàng)。無(wú)論如何,我都會(huì)發(fā)布這個(gè),以防 JSONField 不是你可以使用的東西。
添加回答
舉報(bào)