Django 简单搜索外键和多对多字段
Django Simple Search on Foreign Key and Many to Many Fields
This snippet 对于简单的 Django 搜索效果很好,但不支持搜索外键或多对多字段。如何搜索 FK 和 M2M?
看看这个片段,神奇的地方就在这里:
def get_query(query_string, search_fields):
...
q = Q(**{"%s__icontains" % field_name: term})
...
基于此, 似乎支持 FK 或 M2M 搜索,您只需在 search_fields
字符串中使用双下划线指定完整路径__
.
例如,假设您有一个模型 Task
,它有一个指向 Project
的外键,而 Project
有一个属性 name
:
class Task(models.Model):
project = models.ForeignKey(Project)
class Project(models.Model):
name = models.CharField(max_length=500)
如果您想在 Task
上搜索项目名称,您可以编写以下内容:
>>> tq = get_query('<search term>',['project__name',])
>>> t = Task.objects.filter(tq)
This snippet 对于简单的 Django 搜索效果很好,但不支持搜索外键或多对多字段。如何搜索 FK 和 M2M?
看看这个片段,神奇的地方就在这里:
def get_query(query_string, search_fields):
...
q = Q(**{"%s__icontains" % field_name: term})
...
基于此, 似乎支持 FK 或 M2M 搜索,您只需在 search_fields
字符串中使用双下划线指定完整路径__
.
例如,假设您有一个模型 Task
,它有一个指向 Project
的外键,而 Project
有一个属性 name
:
class Task(models.Model):
project = models.ForeignKey(Project)
class Project(models.Model):
name = models.CharField(max_length=500)
如果您想在 Task
上搜索项目名称,您可以编写以下内容:
>>> tq = get_query('<search term>',['project__name',])
>>> t = Task.objects.filter(tq)