0

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

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

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

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

我正在使用 Postgresql。

4

2 回答 2

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 的一个受欢迎的补丁。

于 2012-08-16T14:36:25.313 回答
1

没试过,但你可以试试这个:

在您的模型中级联官方文档中的取决于相关模型代码,即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。

于 2012-08-15T21:34:12.250 回答