Django按外键排序

时间:2015-02-02 13:43:44

标签: python django sorting model foreign-keys

我在python中编写了一个函数,它需要一组模型的对象按特定参数(问题的代号)排序,这个参数结果是一个字符串。当我在Problems表中对它进行排序时,它正常工作,但是,当我在ProblemUser模型中对其进行排序时(使用order_by),排序完全不正确,尊重实际结果。

我设法通过使用sorted()函数从模型中获取元素后对元素进行排序,但是,我仍然怀疑如何在order_by函数中对外键进行排序。

class Problem(models.Model):
    problem_name = models.CharField(max_length=256,default='Unnamed')
    source = models.CharField(max_length=200)
    url = models.CharField(max_length=200)
    codename = models.CharField(max_length=200, primary_key=True)
    difficulty = models.CharField(max_length=32,default='UNRATED')

class ProblemUser(models.Model):
    problem = models.ForeignKey(Problem)
    handler = models.ForeignKey(Handler)
    solved = models.BooleanField(default=True)
    voted = models.BooleanField(default=False)
    entry = models.DateField()


t = ProblemUser.objects.filter(solved=1, handler=Handler.objects.get(id=1)).order_by('problem')

t[0].problem.codename < t[42].problem.codename
False

t[1].problem.codename < t[42].problem.codename
True

我也试过了order_by('problem__codename')

一些代号示例(这些是我记得在用外键订购时看到的输出):

  

S_1_T
  S_1000_E
  S_1001_F
  。
  。
  。
  S_2_P

感谢您的时间和帮助! :)

1 个答案:

答案 0 :(得分:0)

请尝试一下。

t = ProblemUser.objects.filter(solved=1, handler=Handler.objects.get(id=1)).order_by('problem__codename')