search

Home  >  Q&A  >  body text

怎么在Django中对数据查询结果进行排序?

怎么在Django中对数据查询结果进行排序?

baby不要哭泣baby不要哭泣2864 days ago1001

reply all(2)I'll reply

  • 数据分析师

    数据分析师2017-10-01 00:02:10

    How to sort data query results in Django? -PHP Chinese website Q&A-How to sort data query results in Django? -PHP Chinese website Q&A

    Let’s take a look and learn.

    reply
    0
  • 伊谢尔伦

    伊谢尔伦2017-02-10 09:31:46

    使用 order_by() 这个方法就可以搞定了。

    >>> Publisher.objects.order_by("name")
    [<Publisher: Apress>, <Publisher: O'Reilly>]

    跟以前的 all() 例子差不多,SQL语句里多了指定排序的部分:

    SELECT id, name, address, city, state_province, country, website
    FROM books_publisher
    ORDER BY name;

    我们可以对任意字段进行排序:

    >>> Publisher.objects.order_by("address")
    [<Publisher: O'Reilly>, <Publisher: Apress>]
    >>> Publisher.objects.order_by("state_province")
    [<Publisher: Apress>, <Publisher: O'Reilly>]

    如果需要以多个字段为标准进行排序(第二个字段会在第一个字段的值相同的情况下被使用到),使用多个参数就可以了,如下:

    >>> Publisher.objects.order_by("state_province", "address") 
    [<Publisher: Apress>, <Publisher: O'Reilly>]

    我们还可以指定逆向排序,在前面加一个减号 - 前缀:

    >>> Publisher.objects.order_by("-name")
    [<Publisher: O'Reilly>, <Publisher: Apress>]

    尽管很灵活,但是每次都要用 order_by() 显得有点啰嗦。 大多数时间你通常只会对某些 字段进行排序。 在这种情况下,Django让你可以指定模型的缺省排序方式:

    class Publisher(models.Model):
      name = models.CharField(max_length=30)
      address = models.CharField(max_length=50)
      city = models.CharField(max_length=60)
      state_province = models.CharField(max_length=30)
      country = models.CharField(max_length=50)
      website = models.URLField()
      def __unicode__(self):
        return self.name
      **class Meta:**
        **ordering = ['name']**


    reply
    0
  • Cancelreply