Я использую MySQL с Django и не могу видеть данные, возвращенные из запроса, выполненного в моем диспетчере моделей.Отображение данных, возвращаемых диспетчером модели в django
Страница обрабатывается таблицей, границами и разбиением на страницы работает, однако ни одно из значений полей не отображается в таблице.
Я предполагаю, что между возвратом результатов запроса и представлением его в html требуется шаг, но я в тупике.
Для контекста, я настраиваю своего менеджера, поэтому я могу выполнять более сложные запросы, чем то, что предлагается с Django.
Я последовал некоторые примеры использования модели менеджеров с довольно простым запросом, как старт - .. один из многих ссылок я исследуемая за пределами этого сайта: https://docs.djangoproject.com/en/dev/topics/db/managers/#custom-managers
После тратить много времени на поиск я доверяю кому-то здесь может помочь. Заранее спасибо!!
Вот модель менеджера:
class ElectionsManager(models.Manager):
def is_active(self):
from django.db import connection
cursor = connection.cursor()
cursor.execute("""
SELECT *
FROM
newvoterproject.fullvh vh1
WHERE
vh1.city = 'Glocester' and
vh1.current_party = 'd'
group by
vh1.city,
vh1.street_name,
vh1.street_name_2,
vh1.street_number,
vh1.unit
;""")
result_list = cursor.fetchall()
return result_list
и здесь надрез модели:
class Election(models.Model):
voter_id = models.CharField(primary_key=True, max_length=25)
last_name = models.CharField(max_length=50, blank=True, null=True)
first_name = models.CharField(max_length=50, blank=True, null=True)
middle_name = models.CharField(max_length=50, blank=True, null=True)
current_party = models.CharField(max_length=50, blank=True, null=True)
street_number = models.CharField(max_length=50, blank=True, null=True)
street_name = models.CharField(max_length=50, blank=True, null=True)
street_name_2 = models.CharField(max_length=50, blank=True, null=True)
unit = models.CharField(max_length=50, blank=True, null=True)
city = models.CharField(max_length=50, blank=True, null=True)
state = models.CharField(max_length=50, blank=True, null=True)
zip_code = models.CharField(max_length=50, blank=True, null=True)
zip_code_4 = models.CharField(max_length=50, blank=True, null=True)
precinct = models.CharField(max_length=50, blank=True, null=True)
status = models.CharField(max_length=50, blank=True, null=True)
objects = ElectionsManager() # model manager
class Meta:
managed = False
verbose_name = 'Election'
verbose_name_plural = 'Elections'
db_table = 'fullvh'
def __str__(self):
return '%s %s' % (self.first_name, self.last_name)
Вызов менеджера модели с точки зрения:
def vhistfun(request):
election_table = Election.objects.is_active()
paginator = Paginator(election_table , 25) # Show 25 contacts per page - may want to change this to READ 25 at a time...
page = request.GET.get('page')
try:
electpage = paginator.page(page)
except PageNotAnInteger:
electpage = paginator.page(1)
except EmptyPage:
electpage = paginator.page(paginator.num_pages)
context = {'electpage': electpage,
}
return render(request, 'elections/electable.html', context)
.. и html snip обработка результатов
{% for elect in electpage %}
<tr id="voterrowclass" class="">
<td> {{ elect.first_name|lower|capfirst }} </td>
<td> {{ elect.last_name|lower|capfirst }} </td>
<td> {{ elect.current_party}} </td>
<td> {{ elect.street_number}} {{ elect.unit}} </td>
<td> {{ elect.street_name|lower|capfirst}} {{ elect.street_name_2|lower|capfirst}} </td>
<td> {{ elect.city|lower|capfirst}} </td>
</tr> <!-- # model data sent from view -->
{% endfor %}
Так что есть способ преобразовать результаты в набор итерируемых объектов? функции набора запросов в django не будут работать для моих нужд. – catonalake
Они повторяемы; проблема не в цикле for, это факт, что вы ссылаетесь на каждое поле по имени, тогда как у вас есть только кортеж значений. Однако вы, вероятно, должны использовать метод запроса '' raw' '(https://docs.djangoproject.com/en/1.9/topics/db/sql/#performing-raw-queries) вместо прямого вызова курсора, так как который отображает имена полей. –