當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。