2015-05-07 142 views
1

我正在使用Django的外部数据库。我已经编写了一个脚本来填充数据库。我能够通过syncdb访问这些数据,并且为这些数据创建了一个模型。数据必须被设置为像

我能够打印整个数据库,但使用:

TicketOdds.objects.all()[0] 

引发以下异常:

ValueError异常在/

数据必须查询集样(有计和order_by)或支持列表(数据) - TicketOdds没有

我的模式是:

class TicketOdds(models.Model): 
    #id = models.AutoField(primary_key=True) 
    price = models.IntegerField(blank=True, null=True) 
    ticket_name = models.TextField(blank=True, null=True) 
    ticket_id = models.IntegerField(primary_key=True, blank=True, null=False) 
    odds = models.FloatField(blank=True, null=True) 
    img_url = models.TextField(blank=True, null=True) 
    ticket_url = models.TextField(blank=True, null=True) 

    class Meta: 
     managed = False 
     db_table = 'ticket_odds' 

    def __iter__(self): 
     for i in xrange(100): 
      yield i 

    def __getitem__(self): 
     return unicode(self) 

我怎么添加到模型中,使其“查询集样”?我尝试添加

def __iter__ (self): 

针对特定目的... 我必须失去了一些东西。

+0

从我可以看到你已经成功地在你的db('.all()')中用'TableData()'使用所有的值,但是你试图将它传递给一个单独的对象('。 all()[0]'),这会导致该错误。你想达到什么目的? – Claudiu

回答

2

由于您未发布完整的回溯错误消息。我只会引导您一起回答您的问题。

  1. 看看source code。当TableData(data, table)中的data不可迭代时,它会引发此错误。即没有定义__iter__
  2. 我怀疑你需要在你的ModelModel.Meta定义__iter__方法,因为QuerySet这是当你作出这一呼吁的迭代类可以检索:TicketOdds.objects.all()
  3. 传递data与查询集您先前在检索使TableData(data, table)

实施例:

TableData(TicketOdds.objects.all(), table) 

什么我添加到模型,使其“查询集样”?

您不会让您的模型变得像“queryset-like”,而是您可以使用上述示例从模型中获取QuerySet

+0

首先,我以前没有看到过这样的模式。我没有使用'django-tables2'。这可能只是一个部分答案或不正确的答案,但我希望你可以试试这个,让我们知道它是否有效。 – Yeo

+0

超级noob问题...如何获得追溯错误消息? manage.py shell? –

+0

通常,当“DEBUG = True”时,它们将打印任何错误请求到页面本身,即“黄色”彩色页面。打印的信息之一是“追溯”部分。 http://i.imgur.com/TWL6f.png – Yeo

相关问题