2014-02-11 53 views
1

我得到Person對象與外鍵到contact模型。聯繫人有first_name字段。 Howe按照first_name字段搜索? 型號:如何使用django-extra-views按相關模型字段進行搜索?

class Person(models.Model): 
    (...) 
    contact = models.ForeignKey('addressbook.Contact', on_delete=models.CASCADE) 
    (...) 

class Contact(models.Model): 
    last_name = models.CharField("Nazwisko", max_length="40", blank=False) 
    first_name = models.CharField("Imię", max_length="40", blank=False) 
    (...) 

觀點:

class personListPlus(SortableListMixin, SearchableListMixin, ListView): 
    model = Person 
    search_fields = ['contact__first_name','contact__last_name'] 
    paginate_by = 20 
    template_name = 'list_plus.html' 
    sort_fields = ['contact__first_name', 'contact__last_name'     ] 

排序工作得很好,但我不知道如何創建GET搜索請求。 我試圖http://{VIEW_URL}?q=contact__first_name=ADAM 但在響應我:Related Field has invalid lookup: icontains 我在做什麼錯?

+0

試圖通過'%3D'在URL逃逸'='的跡象,但它沒有什麼區別 –

回答

1

的Django的新版本有安全功能,可防止對相關車型查找。 可以在此問題上找到解決方法: Django: Filtering by %filter% not allowed

+0

這意味着我必須把'在我看來lookup_allowed'方法,正確嗎? –

+0

正如我在django changelog中看到的'lookup_allowed'是'ModelAdmin'的方法,我沒有在這裏使用它。我使用'ListView' –

1

您無法指定將在URL的查詢參數中搜索哪些字段。您的網址應該是這樣的:

http://{VIEW_URL}?q=ADAM

這將在兩個contact__first_namecontact__last_name字段進行搜索,因爲這些都是由* search_field指定的字段*你的觀點的屬性。

你可以看看SearchableListMixin類的get_queryset方法看如何類的查詢進行解析,同時處理查詢參數和搜索領域。

+0

同樣的錯誤'相關字段有無效的查找:icontains' –

相關問題