-1

我有 3 个模型 userprofile 和 group :

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') 之类的东西,但这当然行不通^^

谢谢

4

2 回答 2

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'])
于 2013-04-05T22:07:09.847 回答
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 表示没有的组^^

于 2013-04-05T22:27:14.857 回答