有没有可能使用django-denorm去规范化多层次的关系?
具体地说,我有以下结构:
Question --> User --> CustomProfile --> Avatar我想对Question模型上的头像名称进行反规范化。目前,我必须遍历这4个表才能获得该信息。
我使用的是Postgresql。
发布于 2012-08-16 22:36:25
通常情况下,链接依赖关系是可行的,也是处理这种情况的方法。
在这种情况下,链中的一个模型不是由您提供的,您的最佳选择是实现您自己的依赖类,类似于: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来说,这当然是一个受欢迎的补丁。
发布于 2012-08-16 05:34:12
我还没有尝试过这个,但是你可以试试这个:
将依赖于相关模型的代码级联到您的模型(即Avatar --> Custom Profile --> User --> Question )中的official doc中
因为它在内部使用触发器,所以它应该级联。
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。
https://stackoverflow.com/questions/11977532
复制相似问题