首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Django中高效地重新排序一个排名集合

在Django中高效地重新排序一个排名集合
EN

Stack Overflow用户
提问于 2019-06-14 11:46:12
回答 1查看 102关注 0票数 0

比方说,我想收集书籍,在每个藏书中,图书按独特的排名排序。

一个简单的实现可能如下所示:

代码语言:javascript
复制
class Book(models.Model):
    title = models.CharField(max_length=100)
​
​
class Collection(models.Model):
    # e.g. adventure, classic, fairy tale, ....
    genre = models.CharField(max_length=100)
​
​
class Membership(models.Model):
    collection = models.ForeignKey(Collection, on_delete=models.CASCADE)
    book = models.ForeignKey(Book, on_delete=models.CASCADE)
    rank = models.PositiveSmallIntegerField()
​
    class Meta:
        ordering = ('rank',)
        # 1. Can't have same rank twice in a given collection
        # 2. Don't want duplicate books in same collection
        unique_together = (('collection', 'rank'), ('collection', 'book'))

这是可行的,但主要的问题是,如果我想以一种新的,不同的方式重新排序集合,同时尊重唯一性约束,例如。

  1. 战争与和平
  2. 罪与罚
  3. 赌徒
  4. 丧钟为谁鸣响
  5. 白鲸

我们想重新订购

  1. 白鲸
  2. 丧钟为谁鸣响
  3. 白鲸
  4. 罪与罚
  5. 赌徒

我们怎么能做到呢?仅仅试图重新分配等级,如白鲸迪克= 1,将失败,因为已经有一个等级1(“战争与和平”)的成员,而独特的限制将禁止它。也许我得同时换掉所有的军衔?

每次我想重新订购的时候,我都只是简单地删除了集合的所有Memberships,然后用新的等级重新创建它们,但是这并不是很有效。我在想,一个链接列表方法是否能帮助我摆脱这种混乱呢?如果是这样的话,这和上面的例子有什么关系呢?

还有其他想法吗?

EN

回答 1

Stack Overflow用户

发布于 2019-06-14 12:20:37

如果你只想得到一个随机的查询集,你可以做.order_by('?')

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56597524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档