当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python Django Options.order_with_respect_to用法及代码示例


本文介绍 django.db.models.Options.order_with_respect_to 的用法。

声明

Options.order_with_respect_to

使该对象相对于给定字段可排序,通常是 ForeignKey 。这可用于使相关对象相对于父对象可排序。例如,如果 AnswerQuestion 对象相关,并且一个问题有多个答案,并且答案的顺序很重要,您可以这样做:

from django.db import models

class Question(models.Model):
    text = models.TextField()
    # ...

class Answer(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    # ...

    class Meta:
        order_with_respect_to = 'question'

设置 order_with_respect_to 时,提供了两种额外的方法来检索和设置相关对象的顺序: get_RELATED_order()set_RELATED_order() ,其中 RELATED 是小写的模型名称。例如,假设一个Question对象有多个相关的Answer对象,返回的列表包含相关Answer对象的主键:

>>> question = Question.objects.get(id=1)
>>> question.get_answer_order()
[1, 2, 3]

Question 对象的相关Answer 对象的顺序可以通过传入Answer 主键列表来设置:

>>> question.set_answer_order([3, 1, 2])

相关对象也有两个方法 get_next_in_order()get_previous_in_order() ,可用于按正确顺序访问这些对象。假设 Answer 对象按 id 排序:

>>> answer = Answer.objects.get(id=2)
>>> answer.get_next_in_order()
<Answer: 3>
>>> answer.get_previous_in_order()
<Answer: 1>

order_with_respect_to 隐式设置 ordering 选项

在内部,order_with_respect_to 添加了一个名为 _order 的附加字段/数据库列,并将模型的 ordering 选项设置为该字段。因此,order_with_respect_toordering 不能一起使用,并且每当您获得此模型的对象列表时,都会应用由order_with_respect_to 添加的排序。

更改order_with_respect_to

因为 order_with_respect_to 添加了一个新的数据库列,所以如果您在初始 migrate 之后添加或更改 order_with_respect_to ,请务必进行并应用适当的迁移。

相关用法


注:本文由纯净天空筛选整理自djangoproject.com大神的英文原创作品 django.db.models.Options.order_with_respect_to。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。