我有这些模特:
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 A
和User B
有两个条目:
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 :(得分:1)
试试这个:
EntryRank.objects.all().exclude(user__user__id = user_id).order_by('-rank', 'user__id')
在这种情况下,您使用exclude
子句过滤一些用户,并按EntryRank.rank
来排序结果
您可以增加exclude子句的复杂性,如:
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