背景結合數據的Django模型:代表從其他2款
我湊2個來源出售即將到來的性能數據,讓我們稱之爲一個SaleAnnouncement
和其他SellerMaintainedData
。他們共享許多相同的字段名稱(儘管一些數據只能在一箇中找到,而不能在另一箇中找到)。如果某件物品即將出售,則保證是SaleAnnouncement
,但不一定是SellerMaintainedData
。實際上,只有大約10%的「賣家」在自己的網站上維護相關數據。但是,那些確實擁有更多信息,並且數據比公告中的數據更新。此外,「公告」是自由形式的文本,在提取相關數據之前需要經過幾個處理步驟,因此,該模型有一些字段用於在中間處理步驟中存儲數據(部分原因是我選擇了2模型,而不是將它們合併爲1),而「賣家」數據則以整潔的表格格式進行挖掘。
問題:
我最終會喜歡把它們組合成一個SaleItem
,並實施了這是關係到以前的2款機型,並在很大程度上依賴於性能優先的數據來自哪個模型從模型。例如:
@property
def sale_datetime(self):
if self.sellermaintaineddata and self.sellermaintaineddata.sale_datetime:
return self.trusteeinfo.sale_datetime
else:
return self.latest_announcement and self.latest_announcement.sale_datetime
但是,我顯然不能查詢這些字段,這將是我列出即將到來的銷售額時的最終目標。我曾被提出過一種解決方案,它涉及到創建一個覆蓋過濾器/排除方法的自定義管理器,這聽起來很有希望,但我必須複製模型管理器中的所有屬性字段邏輯。
摘要(爲了清楚起見)
我:
class SourceA(Model):
sale_datetime = ...
address = ...
parcel_number = ...
# other attrs...
class SourceB(Model):
sale_datetime = ...
address = ...
# no parcel number here
# other attrs...
我想:
class Combined(Model):
sale_datetime = # from sourceB if sourceB else from sourceA
...
我想去的地方SourceA
和SourceB
之間的公共領域是優先所以一個統一的模式如果SourceB
存在,則從導出該字段的值或者它來自SourceA
。我也想這些領域,所以也許使用性質來查詢是不是最好的辦法...
問題
有沒有更好的辦法,我應該考慮轉型我的模型(可能合併這2)還是定製經理解決方案的路要走?
雖然這似乎解決了常見字段形式的重複代碼問題,但它並沒有解決將項目鏈接在一起代表一個'SaleItem'的更大問題,這使我可以將它們作爲統一模型來查詢。如果有什麼內容類型框架看起來比抽象基類更適合,但即使這似乎並沒有解決統一我正在尋找 –
我真的很抱歉,我一定誤解了你的問題。我會去定製經理的方法。也許這樣的一個http://stackoverflow.com/questions/17968501/single-custom-manager-for-multiple-models-in-django? – mateuszb