2015-11-27 55 views
1

我有一個帶有ISBN字段的模型。 ISBN(國際標準書號)可能是ISBN10(10位數字)或ISBN13(13位數字)。我可以使用自定義函數將10到13和13轉換爲10。 重點是我想要Django在ISBN字段中搜索,無論它是ISBN10還是ISBN13(該字段都接受這兩個字段)。要做到這一點,有必要在某處包含convert函數。例如:如果我的搜索值是8489691207,我希望Django將該值和轉換後的值搜索到ISBN13(9788489691209)。在Django上實現自定義函數search_fields

我使用Django 1.8和Python 2.7

回答

1

基於麥金太爾的答案(謝謝):

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 
1

可以覆蓋模型管理的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) 返回的查詢集,use_distinct

+0

我覺得缺了點什麼。也許我的問題並不像我想象的那麼清晰,但我需要的是做一個WHERE OR查詢,因爲我不知道db中存儲了什麼樣的isbn(10或13)。 search_term可能是好的,也可能是將其轉換爲13(或10,取決於原始isbn search_term)。 –

+0

我回答我自己的問題。謝謝你的幫助。 –

相關問題