Django преобразовывает генератор в список

Я использую пакет для django-голосования и пытаюсь заставить его менеджера get_top() работать. Я наткнулся на одну проблему - он производит генератор (из которого на самом деле мне нужно извлекать данные для выбора элементов из базы данных), что мне кажется проблемой.

Проведя два дня в поиске и поиске форумов, я пришел к выводу, что самое близкое к этому заключается в следующем: что такое "объект генератора" в django?

Это говорит о том, что любой генератор может быть преобразован в список:

mylist=list(myGenerator)

Хотя, если я преобразую генератор в список, я получаю следующую ошибку:

'NoneType' object has no attribute '_meta'

Вот мой взгляд и код модели:

def main(request):
    temporary = TopIssue.objects.get_top(Model=Issue, limit=10)
    temp_list = list(temporary)
    return render_to_response('main/index.html', temp_list)

from voting.managers import VoteManager
class TopIssue:
    objects = VoteManager()

Есть идеи?

1 ответ

Решение

Может быть, это просто опечатка в вашем примере кода, но ваш class TopIssue не является производным от класса модели Django. Это также может объяснить, почему вы получаете сообщение об ошибке пропавшего _meta приписывать.

Изменить: я не знаком с django-голосования, но от просмотра документов, первый аргумент для менеджера get_top() Функция должна быть моделью Джанго.

Это достигается путем наследования от базового класса, предоставленного Django. Модели Django описаны в документации по модели Django.

Таким образом, по крайней мере, ваш TopIssue класс должен быть объявлен так:

from django.db import models

class TopIssue(models.Model):
    # fields go here
    objects = VoteManager() # for integration with django-voting

Ваш класс TopIssue должен быть моделью базы данных, а get_top() функция должна возвращать самый высокий голосующий экземпляр этой модели. Пожалуйста, опубликуйте оставшуюся часть кода, если у вас есть дополнительные вопросы (мне кажется очень странным, что то, что вы опубликовали, является вашим полным TopIssue класс - вам не хватает полей и т. д.).

Другие вопросы по тегам