Django在查询中排除了关注者

时间:2013-04-09 07:26:58

标签: python django subquery django-queryset

我有2个模型,userProfile和relationship。用户可以相互关注,并通过关系模型建立关系。这是代码:

class UserProfile(models.Model):    
    slug = models.SlugField(max_length=200)
    user = models.ForeignKey(User, unique =True)
    relationships = models.ManyToManyField('self', through='Relationship',symmetrical=False,null=True, blank=True,related_name='related_to')

class Relationship(models.Model):
    from_person = models.ForeignKey(UserProfile, related_name='from_people')
    to_person = models.ForeignKey(UserProfile, related_name='to_people')
    status = models.IntegerField(choices=RELATIONSHIP_STATUSES)

我正在尝试获取userProfile列表,不包括userProfile列表,后跟某个用户。 这是我的疑问:

topUsersRecommendation = UserProfile.objects.exclude(id=profile.id,relationships__to_people__from_person = profile).extra(
   select={
    'num_group': """
     SELECT COUNT(*) FROM axiom_alto_groupuser gu1
     JOIN axiom_alto_groupuser gu2 on gu1.group_id = gu2.group_id
     WHERE gu2.user_id=axiom_alto_userprofile.id 
     AND gu1.user_id = %d """ % profile.id,
},

).order_by('-num_group')

但排除似乎不起作用。 谢谢你的帮助^^

1 个答案:

答案 0 :(得分:0)

您可以将字段添加到UserProfile,如下所示:

followers = models.ManyToManyField(
    'self',
    blank=True,
    symmetrical=False,
    through='Relationship',
    related_name='followees'
)

IIRC你可以做这样的事情:

certain_user = UserProfile.objects.get(slug='Bob')
all_but_certain_user_followees = UserProfile.objects.all().exclude(
    follower = certain_user
)