根据Django中的少数条件从几个关系表中选择数据

时间:2014-02-20 17:39:11

标签: python django django-select-related django-related-manager

我正在使用Django 1.6和Python 2.7,我的相关模型很少:

# keys/models.py
class Key(models.Model):
    user = models.ForeignKey('auth.User')
    is_valid = models.BooleanField()

# entities/models.py
class Entity(models.Model):
    user = models.ForeignKey('auth.User')
    key = models.ForeignKey('keys.Key')
    active = models.BooleanField(default=False)

# profile/models.py
class Profile(models.Model):
    user = models.ForeignKey('auth.User')
    profile_id = models.PositiveIntegerField(null=True, blank=True)

是否可以进行单线查询来检查这些条件:

  • Key.is_valid必须为True
  • Entity.active必须为True
  • Profile.profile_id不得为null(或None

我唯一可以传递给该查询的是request.user

2 个答案:

答案 0 :(得分:1)

如果你想获得Entity对象:

objects = Entity.objects.filter(active=True, 
                                key__is_valid=True, 
                                user__profile__profile_id__isnull=False)

答案 1 :(得分:1)

我认为这就是你所需要的:

检查实体:

entity = Entity.objects.filter(active=True, key__is_valid=True, user=request.user)

检查资料

profile = Profile.objects.filter(user=request.user, profile_id__isnull=False)