2013-04-05 2 views
-1

я 3 модели USERPROFILE и группа:порядка по условию Джанго

class UserProfile(models.Model):  
    slug = models.SlugField(max_length=200) 
    user = models.ForeignKey(User, unique =True) 
    professionalNetwork = models.ForeignKey('SubForum',null=True, blank=True) 

class Group(models.Model): 
    slug = models.SlugField(max_length=200) 
    name = models.CharField(max_length=200) 
    professionalNetwork = models.ForeignKey('SubForum') 

class SubForum(models.Model): 
    name = models.CharField(max_length=200) 

Как получить все группы по заказу сначала один, которые имеют ту же самую профессиональную сеть в качестве конкретного пользователя тогда остальные?

Я смотрел на то, как Group.objects.all() order_by. ('- professionalNetwork = profile.professionalNetwork'), но это не работает, конечно ^^

Спасибо Вам

+0

Не значит фильтрации? – Neob91

+0

фильтрация даст мне только те, которые имеют одинаковую профессиональную сеть. Я хочу, чтобы все они были заказаны тем, у кого есть первая профессиональная сеть. –

+0

Это слишком локализованное требование. Django поддерживает упорядочение по значениям одного или нескольких полей. То, что вам нужно, потребует проверки пользовательских условий и последующего заказа. Вы можете либо заказать после получения запросов, либо написать сырой SQL. –

ответ

1

Как об этом (аналогично примеру в docs). Идея состоит в том, что вы вводите другое поле, которое вычисляет, принадлежит ли группа к указанной профессиональной сети, и затем набор запросов сортируется по этому полю.

subforum_id = 1 # some id here by which you need to sort 

sql = ''.join((
    'CASE professionalNetwork ', 
    'WHEN {} THEN 1 '.format(subforum_id), 
    'ELSE -1', 
)) 
q = Group.objects.extra(select={'same_subforum': sql}) 
q = q.extra(order_by=['same_subforum']) 
+0

спасибо @ miki725 –

0

Я понял!

groupRecommendation = Group.objects.extra(
select={ 
    'network': """ 
    SELECT COUNT(*) FROM axiom_alto_userprofile 
    WHERE \"professionalNetwork_id\"= axiom_alto_group.\"professionalNetwork_id\" AND axiom_alto_userprofile.id = %d """ % profile.id, 
}, 
).order_by('-network') 

Это отдай 1 для группы, которые имеют ту же самую профессиональную сеть и 0 для того, кто не ^^

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