2014-10-10 3 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

Did вы получите ответ, если чем марка проверяемым да. – ancho

ответ

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,.. ] 

После того, как вы итерация результатов, которые вы можете получить Entry и SomeUsers ссылки с вашего 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

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