Django简单搜索外键和多对多字段

时间:2015-04-29 00:03:38

标签: django django-models django-queryset

This snippet对于简单的Django搜索效果很好,但不支持在Foreign Key或Many to Many字段上进行搜索。我如何搜索FK和M2M?

1 个答案:

答案 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)