2012-08-15 58 views

回答

2

通常,鏈接依賴性是有效的,並且是處理這種情況的方法。

在這種情況下鏈中的一個模型不是通過你提供的,你最好的辦法是實行類似於那些在發現自己的依賴類: 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的歡迎補丁。

+0

感謝您的建議。我會盡力實現這一點,並回饋。與此同時,我添加了自己的字段,並覆蓋了相關模型的「保存」方法。 – ustun 2012-08-16 16:29:56

1

沒有試過,但你可以試試這個:

級聯的根據相關模型代碼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。

+0

我很抱歉,我無法理解您的建議。我認爲你的建議是將反規範化應用到路徑中的每個模型中,這就是你的建議?所以,它觸發了下一個關卡。我想到了這一點,但問題是我有django-auth的用戶模型,我不想碰它。 – ustun 2012-08-15 21:44:28

+0

那麼你可以嘗試擴展Django認證用戶模型,也許可以使你的'CustomProfile(auth.User)'作爲'Question'模型引用的那個' – 2012-08-16 06:03:56