是否可能使用django-denorm对多级关系进行非规范化?
具体来说,我有以下结构:
Question --> User --> CustomProfile --> Avatar
我想在Question
模型上对头像名称进行非规范化。目前,我必须遍历这4个表来获取该信息。
我正在使用Postgresql。
答案 0 :(得分: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的一个受欢迎的补丁。
答案 1 :(得分: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。