Django ORM - 通过user_id加入很多表

时间:2012-08-06 15:17:19

标签: python django join orm

我有大约5个用户外键表,即:

class Passport(models.Model):
    user = models.OneToOneField(User)
    ...

此外,还有像UserProfile,Company,UserOptions,NotifySettings等类。我需要为用户摘要页面提供连接值的dict。此外,我需要加入这个联盟这个摘要统计数据:

rent_sums = WriteOff.objects.filter(created_at__range=(rent_start, rent_finish), write_off_type='rent').values('user').\
                annotate(rent_amount=Sum('amount')).order_by()

如果没有手动更新结果字典,我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

你可以通过从django执行custom SQL来做到这一点,但我在这里看到的主要问题是处理模型的方式,如果你将所有这些用户外键混合在一起会更容易UserProfile,例如:

class UserProfile(models.Model):
    user = fields.OneToOneField(User)
    company = fields.ForeignKey(Company)
    options = fields.ForeignKey(Options)
    notification_settings = fields.ForeignKey(NotifySettings)
    ...

这样你就可以使用ORM django带来更轻松。在我看来,创建迁移而不是这个巨大的查询会更快。