在 Django 上实现自定义函数 search_fields
Implement custom function on Django search_fields
我有一个带有 ISBN 字段的模型。
ISBN(国际标准书号)可能是 ISBN10(10 位)或 ISBN13(13 位)。我可以使用自定义函数将 10 转换为 13,将 13 转换为 10。
重点是我希望 Django 在 ISBN 字段中搜索,无论它是 ISBN10 还是 ISBN13(该字段都接受)。为此,有必要在某处包含转换函数。例如:如果我搜索的值是 8489691207 我希望 Django 搜索该值并将转换后的值转换为 ISBN13 (9788489691209)。
我正在使用 Django 1.8 和 Python 2.7
您可以覆盖模型管理员的 get_search_results
方法。
class BookAdmin(admin.ModelAdmin):
def get_search_results(self, request, queryset, search_term):
if is_isbn10(search_term):
search_term = convert_to_isbn13(search_term)
queryset, use_distinct = super(BookAdmin, self).get_search_results(request, queryset, search_term)
self.model.objects.filter(年龄=search_term_as_int)
return 查询集,use_distinct
根据 Alasdair 的回答(谢谢):
from django.db.models import Q
from isbnlib import get_isbnlike, is_isbn10, is_isbn13, to_isbn10, to_isbn13
class Question_Admin(admin.ModelAdmin):
def get_search_results(self, request, queryset, search_term):
queryset, use_distinct = super(Question_Admin, self).get_search_results(request, queryset, search_term)
isbn = get_isbnlike(search_term, level='normal')
if isbn:
if is_isbn10(isbn[0]):
converted = to_isbn13(isbn[0])
else:
converted = to_isbn10(isbn[0])
queryset |= self.model.objects.filter(Q(isbn=isbn[0]) | Q(isbn=converted))
return queryset, use_distinct
我有一个带有 ISBN 字段的模型。 ISBN(国际标准书号)可能是 ISBN10(10 位)或 ISBN13(13 位)。我可以使用自定义函数将 10 转换为 13,将 13 转换为 10。 重点是我希望 Django 在 ISBN 字段中搜索,无论它是 ISBN10 还是 ISBN13(该字段都接受)。为此,有必要在某处包含转换函数。例如:如果我搜索的值是 8489691207 我希望 Django 搜索该值并将转换后的值转换为 ISBN13 (9788489691209)。
我正在使用 Django 1.8 和 Python 2.7
您可以覆盖模型管理员的 get_search_results
方法。
class BookAdmin(admin.ModelAdmin):
def get_search_results(self, request, queryset, search_term):
if is_isbn10(search_term):
search_term = convert_to_isbn13(search_term)
queryset, use_distinct = super(BookAdmin, self).get_search_results(request, queryset, search_term)
self.model.objects.filter(年龄=search_term_as_int) return 查询集,use_distinct
根据 Alasdair 的回答(谢谢):
from django.db.models import Q
from isbnlib import get_isbnlike, is_isbn10, is_isbn13, to_isbn10, to_isbn13
class Question_Admin(admin.ModelAdmin):
def get_search_results(self, request, queryset, search_term):
queryset, use_distinct = super(Question_Admin, self).get_search_results(request, queryset, search_term)
isbn = get_isbnlike(search_term, level='normal')
if isbn:
if is_isbn10(isbn[0]):
converted = to_isbn13(isbn[0])
else:
converted = to_isbn10(isbn[0])
queryset |= self.model.objects.filter(Q(isbn=isbn[0]) | Q(isbn=converted))
return queryset, use_distinct