-1

我正在使用此代码

episodes=Episode.objects.filter().order_by('name')

我得到的结果是

episode 1
episode 10
episode 11
episode 12
episode 2

相反,我希望结果为

episode 1 episode 2 episode 10 episode 11
4

3 回答 3

3

可能最好将剧集编号存储为一个 int 字段并按此排序。

class Episode(models.Model):
    episode_num = models.IntegerField()
    def __unicode__(self):
        return 'episode {}'.format(self.episode_num)

Episode.objects.order_by('episode_num')
于 2013-10-30T05:52:38.100 回答
0

如果剧集名称在剧集名称和剧集编号之间有空格作为分隔符,那么您可以按照以下过程进行操作。您的架构设计是错误的。
但是,如果您想继续使用它,我会告诉您方法。根据编码,性能基础可能不是很好的解决方案,但仍然可以满足您的要求。
请看下面的代码。

####剧集列表  
Episodes = [str(a[0]) for a in Episode.objects.filter().values_list('name')]
#情节排序
sorted_episodes = sorted(episodes, key=lambda x:x.split(' ')[-1] in episodes)
打印 sorted_episodes
于 2013-10-30T07:05:27.983 回答
0

您的数据库架构结构错误。

Django ORM 查询最终被翻译成 SQL。您不能直接在任何 db 列中进行这种排序。

至少,您应该将系列名称与剧集编号分开。

class Episode(models.Model):
    name = models.CharField()
    num = models.IntegerField()

Episode.objects.order_by('name', 'num')

剧集将按其系列名称按字母顺序排序,然后按剧集编号按数字顺序排序。

根据我的经验,在大多数情况下,即使是上面的结构也不够好。剧集名称实际上是系列名称,它应该分开到另一个表中。我将创建这样的模型:

class Series(models.Model):
    name = models.CharField()
    ...

class Episode(models.Model):
    series = models.ForeignKey('Series')
    num = models.IntegerField()
于 2013-10-30T06:20:07.700 回答