2015-07-10 71 views
0

有兩個相關的Django模型,例如:檢索相關的調用者實例可能嗎? (Django的)

from django.db import models 

class Shipping(models.Model): 
    def calc_by_order(self): 
     # calculate shipping by order's total 
     return SHIPPING_RATE * ??? # self.order_set.<something> 

class Order(models.Model): 
    shipping = models.ForeignKey(Shipping) 
    total = models.DecimalField() 

好奇,是否有可能在Shipping.calc_by_order可選的回引主叫實例,並用它來滿足的方法訪問:

order = Order.objects.last() 
print order.shipping.calc_by_order() 

我可以明確地將訂單的實例傳遞給calc_by_order,但是如果這確實是必要的,則會感興趣。

我也知道calc_by_order方法可以定義在Order模型,但這不是一個選項。

+0

爲什麼不是在訂單上定義它的選項?這絕對是最有意義的。 –

+0

@DanielRoseman由於Order是第三方框架的模型,因此可能無法修改。我可以在運行時修補它,但這有點「髒」的解決方案。我也可以定義和使用它的子類,但是對於這樣簡單的情況,懷疑這值得額外的表和數據庫查詢。 – joanblackmoore

+0

請注意,問題示例中的外鍵關係是通過框架API允許在settings.py中定義其他模型字段來實現的。只是領域,而不是方法。 – joanblackmoore

回答

0

似乎沒有額外的Django基礎設施來支持請求的功能。它歸結爲Python的代碼自省方式,可用於inspect標準模塊及其方法。絕對不是生產解決方案,相比之下,猴子修補或子類化看起來優越。

相關問題