# models.pyclass Person(models.Model): first_name = models.CharFIEld("First name",max_length=255) last_name = models.CharFIEld("Last name",max_length=255) # other fIEldsclass Restaurant(models.Model): restaurant_name = models.CharFIEld("Restaurant name",max_length=255) # other fIEldsclass Pizza(models.Model): pizza_name = models.CharFIEld("Pizza name",max_length=255) # other fIElds
当我键入’Tonny’时,我应该得到一个:
>人物模型的“Tonny Montana”
>餐厅模特的“Tonny餐厅”
>披萨模特的“Tonny’s Special Pizza”.
# Look up Q objects for combining different fIElds in a single queryfrom django.db.models import Qpeople = Person.objects.filter(Q(first_name__contains=query) | Q(last_name__contains=query)restaurants = Restaurant.objects.filter(restaurant_name__contains=query)pizzas = Pizza.objects.filter(pizza_name__contains=query)
然后根据需要合并结果
from itertools import chainresults = chain(people,restaurants,pizzas)
好的,当然,这是一个更通用的解决方案.搜索所有型号的所有CharFIElds:
search_models = [] # Add your models here,in any way you find best.search_results = []for model in search_models: fIElds = [x for x in model._Meta.fIElds if isinstance(x,django.db.models.CharFIEld)] search_querIEs = [Q(**{x.name + "__contains" : search_query}) for x in fIElds] q_object = Q() for query in search_querIEs: q_object = q_object | query results = model.objects.filter(q_object) search_results.append(results)
这将为您提供所有查询集的列表,然后您可以将其模制为您选择使用的格式.
要获取填充search_models的模型列表,您可以手动执行,或使用类似get_models
的内容.阅读文档以获取有关其工作原理的更多信息.
以上是内存溢出为你收集整理的python – Django在多个模型中搜索字段全部内容,希望文章能够帮你解决python – Django在多个模型中搜索字段所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)