2013-04-09 2 views
0

У меня есть 2 модели, userProfile и отношения. Пользователи могут следовать друг за другом, и связь осуществляется через модель отношений. Вот код:Django исключить подписчика в запросе

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

что цель поле 'relationship' в модели UserProfile? –

+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 
) 
+0

Это не помогает. –

Смежные вопросы