Учитывая модель данных с заголовком строк, говорят:Как обычай рода Джанго 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",}
Я хочу, чтобы создать QuerySet отсортированный по названию, но учитывая название как минус любые ведущие слова, которые в список, например («a», «an», «the»,). Поэтому «The Incredibles» сортирует до «River Runs Upstream» и т. Д. Я не хочу просто обрезать данные либо в базе данных, либо в полученном виде. Я хочу создать внутреннюю настраиваемую сортировку для запросов.
Один из подходов, кажется, что это мощь работы, чтобы создать собственный список изменений, то сортировать QuerySet там, как:
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, возможно, но не решение - метод 'sorted', по-видимому, не возвращает запрос. –
Правда. Это проблематично. Надеюсь, кто-то знает лучший способ.К сожалению, в соответствии с принятым ответом нет бэкэнд-агностического способа выполнения таких запросов. –