是否可以使用django-denorm來非規範化多級關係?通過django-denorm中的另一個模型非規範化關係
具體來說,我有以下結構:
Question --> User --> CustomProfile --> Avatar
我想非規範化的Question
模型的圖片名稱。目前,我必須遍歷這4張表格才能得到這些信息。
我正在使用Postgresql。
是否可以使用django-denorm來非規範化多級關係?通過django-denorm中的另一個模型非規範化關係
具體來說,我有以下結構:
Question --> User --> CustomProfile --> Avatar
我想非規範化的Question
模型的圖片名稱。目前,我必須遍歷這4張表格才能得到這些信息。
我正在使用Postgresql。
通常,鏈接依賴性是有效的,並且是處理這種情況的方法。
在這種情況下鏈中的一個模型不是通過你提供的,你最好的辦法是實行類似於那些在發現自己的依賴類: https://github.com/initcrash/django-denorm/blob/master/denorm/dependencies.py
等你拿:
class Question(models.Model):
@denormalized(...)
@depend_on_related("User")
@depend_on_indirectly_related("CustomProfile",through="User")
def avatar(self):
return self.user.custom_profile.avatar_name
class CustomProfile(models.Model):
@denormalized(...)
@depend_on_related("Avatar")
def avatar_name(self):
return self.avatar.name
這當然是一個django-denorm的歡迎補丁。
沒有試過,但你可以試試這個:
級聯的根據相關模型代碼在official doc在您的模型,即Avatar --> Custom Profile --> User --> Question
因爲它使用觸發器在內部,它應該級聯。
class SomeModel(models.Model):
# the other fields
other = models.ForeignKey('SomeOtherModel')
@denormalized(models.CharField,max_length=100)
@depend_on_related('SomeOtherModel')
def some_computation(self):
# your code
return some_value
如果這不起作用,我可能會親自使用自定義SQL,然後根據django的ORM。
我很抱歉,我無法理解您的建議。我認爲你的建議是將反規範化應用到路徑中的每個模型中,這就是你的建議?所以,它觸發了下一個關卡。我想到了這一點,但問題是我有django-auth的用戶模型,我不想碰它。 – ustun 2012-08-15 21:44:28
那麼你可以嘗試擴展Django認證用戶模型,也許可以使你的'CustomProfile(auth.User)'作爲'Question'模型引用的那個' – 2012-08-16 06:03:56
感謝您的建議。我會盡力實現這一點,並回饋。與此同時,我添加了自己的字段,並覆蓋了相關模型的「保存」方法。 – ustun 2012-08-16 16:29:56