比方说,我想收集书籍,在每个藏书中,图书按独特的排名排序。
一个简单的实现可能如下所示:
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,将失败,因为已经有一个等级1(“战争与和平”)的成员,而独特的限制将禁止它。也许我得同时换掉所有的军衔?
每次我想重新订购的时候,我都只是简单地删除了集合的所有Memberships,然后用新的等级重新创建它们,但是这并不是很有效。我在想,一个链接列表方法是否能帮助我摆脱这种混乱呢?如果是这样的话,这和上面的例子有什么关系呢?
还有其他想法吗?
发布于 2019-06-14 12:20:37
如果你只想得到一个随机的查询集,你可以做.order_by('?')
https://stackoverflow.com/questions/56597524
复制相似问题