通过django-denorm中的另一个模型来规范化关系

时间:2012-08-15 21:22:00

标签: django postgresql

是否可能使用django-denorm对多级关系进行非规范化?

具体来说,我有以下结构:

Question --> User --> CustomProfile --> Avatar

我想在Question模型上对头像名称进行非规范化。目前,我必须遍历这4个表来获取该信息。

我正在使用Postgresql。

2 个答案:

答案 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。