比方说,我想拥有一些书籍,并且在每个集合中按独特的排名对书籍进行排序。
一个简单的实现可能看起来像这样:
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'))
这可以正常工作,但是主要问题是我是否要在尊重唯一性约束的同时以新的,不同的方式重新排序集合 例如。假设某些收藏有
我们想重新排序
我们该怎么做?仅仅尝试重新分配像Moby Dick = 1这样的等级会失败,因为已经有一个等级1的成员资格(“战争与和平”),并且唯一的约束条件将禁止这样做。 ID 必须以某种方式同时更改所有职位?
每次我要重新排序时,我都只是简单地删除了集合的所有Memberships
,并用新的排名重新创建了它们,但这并不是很有效。
四处阅读,我想知道链表方法是否可以帮助我摆脱困境?如果是这样的话,如何与上面的示例完全一样?
还有其他想法吗?
答案 0 :(得分:-1)
如果您只想获取随机订单查询集,则可以执行.order_by('?')