考慮到與標題字符串的數據模型,說:如何自定義排序的Django的queryset
class DVD(models.Model):
title = models.CharField(max_length=100)
class DVDAdmin(admin.ModelAdmin):
ordering = ('title',)
sample_titles = {"A Fish Called Wanda", "The Good, the Bad, and the Unsorted",
"A River Runs Upstream", "The Incredibles",}
我要生成按標題排序的查詢集,但考慮到標題減去開頭的單詞都在列表,例如(「a」,「an」,「the」,)。因此,「超人」將在「河上游運行」之前排序,等等。我不想僅僅在數據庫或結果視圖中截取數據。我想爲查詢集創建一個內部自定義排序。這似乎是它威力工作
一種方法,是創建一個自定義更改列表,則排序查詢集,如:
from django.contrib.admin.views.main import Changelist
class title_sortlist(Changelist):
def apply_special_ordering(self, queryset):
qs_desc = self.models.objects.all().order_by('-title')
return qs_desc
def get_query_set(self, request, *args, **kwargs):
queryset = super(title_sortlist, self).get_query_set(request)
queryset = self.apply_special_ordering(queryset)
return queryset
class DVDAdmin(admin.ModelAdmin):
ordering = ('title',)
def get_changelist(self, request, **kwargs):
return title_sortlist
本工程爲標準排序 - 降序排序確實覆蓋模型升序排序。但是,我還沒有弄清楚如何將查詢集和自定義排序。
另一種可能性是動態由字段的字段添加到模型,稱之爲cut_title,適當編輯,然後只是排序。不過,我剛剛開始閱讀有關動態模型更改的內容,但不清楚該如何操作(更不用說,它看起來有點不可思議,比普通的猴子補丁更加如此)。
第三個選項,我讀的是Django對查詢集有一個extra
選項,您可以在其中添加其他SQL,包括新字段。我不知道如何添加一個代表編輯標題的新SQL字段 - 可以使用Django SQL調用Python函數嗎?
那麼用什麼辦法,如果有的話,將排序由(修改)標題查詢集是最好的?
相關:http://stackoverflow.com/questions/883575/custom-ordering-in-django。 –
@bebraw,可能相關,但不是解決方案 - 「排序」方法顯然不返回一個查詢集。 –
確實如此。這是有問題的。我希望有人知道更好的方法。不幸的是,根據接受的答案,沒有後端不可知的方式來執行這些查詢。 –