Django查询器根据外键值的具体顺序 [英] Django queryset specific order by based on values of foreign key

查看:580
本文介绍了Django查询器根据外键值的具体顺序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个模型,即位置和球员,一个棒球网站。位置被命名为投手,捕手,第一基地,第二基地,第三基地等。

  class Position(models.Model): 
name = models.CharField(max_length = 100)
slug = models.SlugField()

class Player(models.Model):
name = models.CharField (max_length = 300)
slug = models.SlugField()
position = models.ForeignKey(Position)

有没有办法使一个查询以特定顺序返回玩家?例如,我想做一些例子:

  Player.objects.all()。order_by(position =('第一基地,第二基地,第三基地,投手,捕手))

这将返回所有按照第一个基数,第二个基数,第三个基数,投手,捕获器等的指定顺序排列位置的玩家。

解决方案

您可以在python中使用 sorted()

  order = ['first base' ,'second base','third base','pitcher','catcher'] 
players = sorted(Player.objects.all(),key = lambda p:order.index(p.position.name) )

另请参阅这些相关主题:




I have two models, Position and Player, for a baseball site. Positions are named pitcher, catcher, first base, second base, third base, etc.

class Position(models.Model):
    name = models.CharField(max_length=100)
    slug = models.SlugField()

class Player(models.Model):
    name = models.CharField(max_length=300)
    slug = models.SlugField()
    position = models.ForeignKey(Position)

Is there a way to make one query to return players in a specific order? For example, I'd like to do something like:

Player.objects.all().order_by(position=('first base', 'second base', 'third base', 'pitcher', 'catcher',))

This will return all players sorting them by the position field in the specified order of first base, second base, third base, pitcher, catcher, etc.

解决方案

You can do this in python using sorted():

order = ['first base', 'second base', 'third base', 'pitcher', 'catcher']
players = sorted(Player.objects.all(), key = lambda p: order.index(p.position.name))

Also see these related topics:

这篇关于Django查询器根据外键值的具体顺序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆