0

我正在使用django-voting包,并一直试图让它的经理 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()

有任何想法吗?

4

1 回答 1

0

也许这只是您的示例代码中的一个错字,但您class TopIssue不是从 Django 模型类派生的。这也可以解释为什么您会收到有关缺少_meta属性的错误消息。

编辑:我不熟悉 django-voting,但是从浏览文档来看,管理器get_top()函数的第一个参数必须是 Django 模型。

您可以通过继承 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课程,我觉得很奇怪——您缺少字段等)。

于 2011-02-01T18:20:34.000 回答