如何使用 django-extra-views 按相关模型字段进行搜索



我得到了Person带有外键的对象来contact模型。联系人具有first_name字段。我是否按该first_name字段进行搜索?模型:

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我做错了什么?

较新版本的 django 具有防止查找相关模型的安全功能。可以在此问题上找到解决方法:Django:不允许按%filter%过滤

您无法指定将在 URL 的查询参数中搜索哪些字段。您的网址应如下所示:

http://{VIEW_URL}?q=ADAM

这将在contact__first_namecontact__last_name字段中进行搜索,因为这些字段是由视图的 *search_field* 属性指定的字段。

您可以查看 SearchableListMixin 类的get_queryset方法,以了解查询是如何解析的,以及该类如何处理查询参数和搜索字段。

最新更新