按外键中的字段按字母顺序排序

2024-07-03 06:31:36 发布

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

我想在这件事上寻求帮助,我试图将查询集从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)
  • 首席执行官(fkey 2)

我与.order_by('fkey')的当前结果

  • bjob(fkey 1)
  • 首席执行官(fkey 2)
  • ajob(fkey 3)

可以通过.order_by()按字母顺序列出它们吗?或者有其他方法可以做到这一点吗?提前谢谢


Tags: truebymodel排序顺序models字母job
3条回答
job_list = Job_Posting.objects.order_by('fkey__Job_Position')

documentation开始:

To order by a field in a different model, use the same syntax as when you are querying across model relations. That is, the name of the field, followed by a double underscore (__), followed by the name of the field in the new model, and so on for as many models as you want to join.

Job_Posting.objects.order_by("fkey__Num_Positions")

Job_Posting.objects.order_by("fkey__Job_Position")

取决于您要根据Job模型中的哪个字段进行排序

docs中所述,当您按外键排序时,它是按该键的id排序的(默认情况下)。由于要按该fk上的字段排序,因此还需要使用__来表示字段名

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

注:也不需要.all()

相关问题 更多 >