我得到了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_name和contact__last_name字段中进行搜索,因为这些字段是由视图的 *search_field* 属性指定的字段。
您可以查看 SearchableListMixin 类的get_queryset方法,以了解查询是如何解析的,以及该类如何处理查询参数和搜索字段。