在djang按名称排序

2024-04-19 19:24:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用这个代码

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

Tags: 代码namebyobjectsorderfilterepisodesepisode
3条回答

可能最好将第几集存储为一个整型字段并按其排序。你知道吗

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

Episode.objects.order_by('episode_num')

数据库架构结构错误。你知道吗

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()

如果插曲名称在插曲名称和插曲编号之间有空格作为分隔符,则可以执行以下过程。 您的架构设计错误。
但如果你想继续下去,我会告诉你路。根据编码,性能基础可能不是很好的解决方案,但仍能满足您的要求。
请看下面的代码。你知道吗

####List of episodes  
episodes = [str(a[0]) for a in Episode.objects.filter().values_list('name')]
#sorting of episoded
sorted_episodes = sorted(episodes, key=lambda x:x.split('  ')[-1] in episodes)
print sorted_episodes

相关问题 更多 >