2014-10-10 85 views
0

內我有這些模型:過濾器通過現場ORDER_BY

class EntryRank(models.Model): 
    value = models.FloatField(default=0) 
    user = models.ForeignKey('SomeUser') 
    entry = models.ForeignKey('Entry') 

class Entry(models.Model): 
    feed = models.ForeignKey('RSSFeed') 
    title = models.TextField() 
    content = models.TextField() 
    link = models.URLField(max_length=500) 
    date = models.DateTimeField() 
    rank = models.ManyToManyField('EntryRank', related_name='entry_rank') 
    is_read = models.BooleanField(default=False) 
    is_ignored = models.BooleanField(default=False) 

class RSSFeed(models.Model): 
    url = models.URLField(max_length=500) 
    title = models.CharField(max_length=275) 
    entries = models.ManyToManyField('Entry', blank=True) 
    last_update = models.DateTimeField(auto_now_add=False, null=True, blank=True) 

class SomeUser(models.Model): 
    user = models.ForeignKey('auth.User') 
    rss_feeds = models.ManyToManyField('RSSFeed', blank=True) 
    words = models.TextField(blank=True) 

的問題是,我需要排序rank條目,並在某種程度上被某些用戶篩選行列。

比方說,有2個用戶:User AUser B
有2項:

Entry1: User A: 0.1 
Entry1: User B: 0.12 
Entry2: User A: 0.06 
Entry2: User B: 0.2 

在這種情況下,我需要的條目爲每個用戶單獨排序。
所以User A應該看到列表,如:

Entry1 Entry2 

而且User B

Entry2 Entry1 

在我需要order_by分別由一定EntryRank秒。

到目前爲止,我有:

Entry.objects.all().order_by('-rank__value') 
+0

難道EntrySomeUsers引用您得到您的回答,如果不是標誌作爲證明是。 – ancho 2014-10-10 06:54:59

回答

1

試試這個:

EntryRank.objects.all().exclude(user__user__id = user_id).order_by('-rank', 'user__id') 

在這種情況下,你過濾掉一些用戶exclude條款和EntryRank.rank
責令其結果可以增加複雜性排除條款如:

user__user__user__username__in = [auth_user.id1, auth_user.id2,.. ] 

一旦你遍歷結果,你可以從你的EntryRank對象

for entry_rank in EntryRank.objects.all().exclude(user__user__id = user_id).order_by('-rank', 'user__id'): 
    entry_rank.value #rank 
    entry_rank.user  #SomeUser 
    entry_rank.entry #Entry 
+0

那麼,有一些改變,我認爲這是一個解決方案。我忘記了我可以從排序列表中獲得排序條目的列表。這不完全是我用過的代碼,但你給了我這個想法。謝謝!而不是排除我用過濾條件相反。 – ivknv 2014-10-10 07:11:56