如何对多个Django模型运行查询并通过模板显示它们?
我创建了两个模型,可以分别查询并在各自的模板中进行响应。但是,我想做的是通过Django表单提交查询,使查询针对两个模型运行,然后将结果(如果有的话)显示在单个模板上。我该如何实现?
型号:
class State(models.Model):
text = models.TextField(null=True)
topic_list = models.TextField(null=True)
class Hearings(models.Model):
url = models.TextField(primary_key=True)
title = models.TextField(null=True)
text = models.TextField(null=True)
观看次数:
def state(request,query):
data = state.objects.filter(text__icontains=query).values('text','topic_list')
return render(request,'State.html',context={'data':data})
def hearings(request,query):
data = Hearings.objects.filter(data__icontains=query).values('url','title', 'text')
return render(request,'Hearings.html',context={'data':data})
当前,我可以通过视图分别查询模型。我想针对两个模型通过单个视图运行查询。我该怎么办?
答案 0 :(得分:1)
我对您要达到的目标尚不完全清楚,但我会尽力回答。
如何对多个Django模型运行查询并显示它们 通过模板?
简单的答案是,您可以根据需要在视图函数或类中对任意多个模型运行查询,并将其添加到上下文中以传递给模板。
例如:
def my_view(request):
context = {}
context['people'] = People.objects.all()
context['pets'] = Pet.objects.all()
return render(request, index.html, context)
在模板中,您可以以{{ people }}
和{{ pets }}
的形式访问查询结果并循环查询等。您可以使用Q
对象进行更复杂的查找。 https://docs.djangoproject.com/en/2.1/topics/db/queries/#complex-lookups-with-q-objects
[..]我要做的是通过Django表单提交查询
同样,您可以从表单提交中获取数据并将其放入查询中
def user_input(request):
# if this is a POST request we need to process the form data
if request.method == 'POST':
context = {}
# create a form instance and populate it with data from the request:
form = NameForm(request.POST)
# check whether it's valid:
if form.is_valid():
pet_name = form.cleaned_data.get('pet_name') # get the name entered into the pet name form field
person_name = form.cleaned_data.get('person_name')
context['pets'] = Pet.objects.filter(name=pet_name)
context['people'] = Person.objects.filter(name=person_name)
return render(request, index.html, context)
# if a GET (or any other method) we'll create a blank form
else:
form = NameForm()
return render(request, 'name.html', {'form': form})
同样,您将通过传递给模板的上下文来访问返回的查询。还可以使用Q对象构建复杂的查询。 请参阅文档以获取信息https://docs.djangoproject.com/en/2.1/topics/forms/#the-view