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)