【问题标题】:How to Run Query Against Multiple Django Models in a View如何在视图中对多个 Django 模型运行查询
【发布时间】:2019-01-02 21:12:34
【问题描述】:

如何对多个 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})

目前,我可以通过我的视图单独查询模型。我想通过一个视图对两个模型运行我的查询。我该怎么做?

【问题讨论】:

  • 我不确定我是否理解这个问题。但是您当然可以在一个视图函数中运行这两个查询(如果它同时接受 query 参数,它们似乎是 URL 参数)并让它呈现一个模板,它将两个结果查询集传递给该模板。为什么你会认为你不能做到这一点?你试过了吗?

标签: python django model


【解决方案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

【讨论】:

    猜你喜欢
    • 2020-07-06
    • 2013-04-28
    • 2022-01-10
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    • 2013-05-17
    相关资源
    最近更新 更多