Как выполнить запрос к нескольким моделям Django в представлении - PullRequest
0 голосов
/ 03 января 2019

Как выполнить запрос к нескольким моделям 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)  

Просмотров: 1011

**
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})

В настоящее время я могу запрашивать модели отдельно через мои представления. Я хочу выполнить свой запрос через одно представление для обеих моделей. Как мне это сделать?

1 Ответ

0 голосов
/ 03 января 2019

Мне не совсем понятно, чего вы пытаетесь достичь, но я постараюсь ответить.

Как я могу выполнить запрос к нескольким моделям 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...