按字母顺序按外键排序

时间:2016-02-02 11:37:59

标签: python django

我想请求有关此问题的帮助,我正在尝试订阅Job_Posting.order_by('fkey')的查询集,但我想按字母顺序排序,而不是foreign key

class Job(models.Model):
    Job_Position = models.CharField(max_length=30, null=True)
    Num_Positions = models.CharField(max_length=30, null=True)

    def __unicode__(self):           
        return self.Job_Position



class Job_Posting(models.Model):

    fkey = models.ForeignKey("Job")
    Job_Description = models.TextField(max_length=500, null=True)

通过

job_list = Job_Posting.objects.all().order_by('fkey')

预期结果

  • ajob(fkey 3)
  • bjob​​(fkey 1)
  • cjob(fkey 2)

我目前使用.order_by('fkey')

的结果
  • bjob​​(fkey 1)
  • cjob(fkey 2)
  • ajob(fkey 3)

是否可以通过.order_by()或其他方式按字母顺序列出?提前谢谢。

3 个答案:

答案 0 :(得分:2)

docs所述,当您按外键订购时,它按该键的ID排序(默认情况下)。由于您希望按该fk上的字段进行排序,因此您需要使用__来表示字段名称

job_list = Job_Posting.objects..order_by('fkey__Job_Position')

注意:也不需要.all()

答案 1 :(得分:2)

Job_Posting.objects.order_by("fkey__Num_Positions")

Job_Posting.objects.order_by("fkey__Job_Position")

取决于您要订购的Job型号中的哪个字段。

答案 2 :(得分:1)

job_list = Job_Posting.objects.order_by('fkey__Job_Position')

来自documentation

  

要按其他模型中的字段排序,请使用与when相同的语法   你正在查询模型关系。就是这个名字   字段,后跟双下划线(__),后跟名称   新模型中的字段,等等,可以根据需要添加任意数量的模型   加入。