This snippet对于简单的Django搜索效果很好,但不支持在Foreign Key或Many to Many字段上进行搜索。我如何搜索FK和M2M?
答案 0 :(得分:0)
看一下片段,魔术就在这里发生:
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)