Django: вывод фильтра базы данных отображает <Набор запросов []>

#django #django-templates #django-views

#django #django-шаблоны #django-представления

Вопрос:

Я новичок в django, я пытаюсь импортировать данные из базы данных с помощью нескольких фильтров.

views.py

 from django.shortcuts import render
from django.http import HttpResponse
from .models import NodesdataArchive    
# Create your views here.
def home_view(request, *args, **kwargs):
    data = NodesdataArchive.objects.filter(status=1, vendor='F5', location='NA')    
    host = {    
        "dns" : data 
    }
    return render (request, "home.html", {'posts': host})
  

После использования нескольких запросов я выбираю только объект «dns» для отображения. когда я проверил значение переменной «хост», она показала правильный вывод. когда я загружаю его в шаблон html, он показывает полный вывод, который отображается в переменной «host», а не только точное значение.

текущий вывод :

«Набор запросов [NodesdataArchive: объект NodesdataArchive (austin)>]>»

Ожидайте, что вывод будет отображаться в шаблоне html:

остин

Пожалуйста, помогите, спасибо!!!

models.py

class NodesdataArchive(models.Model):
ip_address = models.CharField(db_column='IP_Address', max_length=50, blank=True, null=True) # Field name made lowercase.
dns = models.CharField(db_column='DNS', max_length=255, blank=True, primary_key=True) # Field name made lowercase.
vendor = models.CharField(db_column='Vendor', max_length=255, blank=True, null=True) # Field name made lowercase.
location = models.CharField(db_column='Location', max_length=255, blank=True, null=True) # Field name made lowercase.
status = models.CharField(db_column='Status', max_length=20, blank=True, null=True) # Field name made lowercase.

Ответ №1:

Предположительно, в вашем шаблоне у вас есть

 {{ dns }}
  

Попробуйте

 {% for item in dns %}
   {{ item }}
{% endfor %}
  

Объяснение:
Вы загружаете набор запросов, а не конкретный элемент, потому что вы используете filter() . Если вы знаете, что только одна запись будет соответствовать критериям фильтра, используйте NodesdataArchive.objects.get(status=1, vendor='F5', location='NA') , и тогда {{ dns }} будет работать в шаблоне.

Комментарии:

1. у меня есть запрос из filter для получения, если я упомяну {{ dns }} в шаблоне, на веб-странице ничего не отображается. если я упомяну {{ posts.dns }}, он отображается на этот раз NodesdataArchive object (austin) . Я также пробовал с циклом, но ничего не отображается.

2. Извините, я недостаточно внимательно прочитал ваш пост. Попробуйте {{ posts.dns }} . Для этого может потребоваться выполнить цикл, как показано ранее

3. если я использую цикл, я получаю сообщение об ошибке Объект ‘NodesdataArchive’ не повторяется , если я использую без цикла {{ posts.dns }} , я получаю вывод в виде NodesdataArchive object (austin)

4. {{ posts.dns.fieldname }} где fieldname то, что вы хотите напечатать

5. я нашел решение. для запроса с одним значением = NodesdataArchive.objects.get(status=1, vendor='F5', location='NA').dns и для множественной записи for data in NodesdataArchive.objects.filter(status=1, vendor='F5', location='NA'): print(data.dns) Спасибо за вашу помощь @HenryM