首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过django-denorm中的另一个模型对关系进行反规范化

通过django-denorm中的另一个模型对关系进行反规范化
EN

Stack Overflow用户
提问于 2012-08-16 05:22:00
回答 2查看 332关注 0票数 0

有没有可能使用django-denorm去规范化多层次的关系?

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

代码语言:javascript
复制
Question --> User --> CustomProfile --> Avatar

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

我使用的是Postgresql。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-16 22:36:25

通常情况下,链接依赖关系是可行的,也是处理这种情况的方法。

在这种情况下,链中的一个模型不是由您提供的,您的最佳选择是实现您自己的依赖类,类似于:https://github.com/initcrash/django-denorm/blob/master/denorm/dependencies.py中的依赖类

所以你会得到:

代码语言:javascript
复制
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来说,这当然是一个受欢迎的补丁。

票数 2
EN

Stack Overflow用户

发布于 2012-08-16 05:34:12

我还没有尝试过这个,但是你可以试试这个:

将依赖于相关模型的代码级联到您的模型(即Avatar --> Custom Profile --> User --> Question )中的official doc

因为它在内部使用触发器,所以它应该级联。

代码语言:javascript
复制
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。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11977532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档