[英]Django Generic Foreign Key Sorting
所以我有一個與其他三個模型具有通用外鍵關系的模型
class Status(BaseRequestStatus):
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
class Request(models.Model):
name = models.CharField(max_length=50, db_index=True)
...some fields
statuses = GenericRelation(Status, related_query_name='request')
class AnotherRequest(models.Model):
name = models.CharField(max_length=50, db_index=True)
...some fields
statuses = GenericRelation(Status, related_query_name='another_request')
class ThirdRequest(models.Model):
name = models.CharField(max_length=50, db_index=True)
...some fields
statuses = GenericRelation(Status, related_query_name='third_request')
所以目前我在表格中顯示名稱的狀態。 我希望能夠按名稱排序。 目前我正在這樣排序。
Status.objects.all().order_by('request__name', 'another_request__name', 'third_request__name')
但是使用這種方法,所有'request'都在一個chunk中排序,然后'another_request',然后'third_request'
無論如何要將所有這些整理在一起嗎? 我能夠通過將其轉換為列表來實現它。但在這種情況下,我需要使用Queryset。
在此先感謝您的幫助。
如果您希望它們以相同的方式處理(從您希望它們按公共name
字段排序的事實中推斷出這一點),則表明這些模型具有相同的基礎。
在這種情況下,使用模型繼承與抽象的基本模型,並定義name
字段和通用fkey關系。
class RequestBase(models.Model):
name = models.CharField(max_length=50, db_index=True)
statuses = GenericRelation(Status, related_query_name='request')
class Meta:
abstract = True
class Request(RequestBase):
# ... more fields
Status.objects.all().order_by('request__name')
更一般的解釋是:為了能夠按一個屬性對對象進行排序,您必須明確它們共享同一個屬性。 通過在您自己的例程中獲取值並創建可排序的列表(這將是您提到的qs方法)或創建公共接口 - 這是此模型繼承方法。
但是,只要您不使用表繼承,就無法使用數據庫進行排序(意思是:您不能使用Django ORM進行排序)。
當然還有其他方法,包括Django模型之外的方法:例如,生成一個額外的查找結構,如搜索索引,它將根據需要包含您的轉換數據(例如,大海撈針索引)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.