数据必须是查询设置

时间:2015-05-07 19:05:40

标签: python django django-tables2

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

我可以打印整个数据库,但使用:

namespace persisitence
open System.Collections.Generic
open System
open System.IO

type LocalData<'T> =
    struct
        val mutable elements_ : 'T list
        val mutable lock_ : obj
        new(e: 'T list) = { elements_ = e ; lock_ = new obj() }
    end

type BinaryPersistenceOut<'T, ^W when ^W: (member write : ('T * BinaryWriter) -> unit)>(fn: string, serializer: ^W) as this = 
    let writer_ = new BinaryWriter(File.Open(fn, FileMode.Append))
    let mutable localdata_ = new LocalData<'T>([])
    let serializer_ = serializer
    let NUM_SECS_IN_MIN = 60
    let NUM_MSECS_IN_SEC = 1000
    let NUM_MIN_BETWEEN_COMMITS = 2
    let TIME_TO_WAIT = 15
    let closed_ = false

    let freq_ = NUM_MIN_BETWEEN_COMMITS * NUM_SECS_IN_MIN * NUM_MSECS_IN_SEC
    let path_ = fn
    let timer_ = new System.Timers.Timer((float) (NUM_MIN_BETWEEN_COMMITS * NUM_MSECS_IN_SEC) )

    let writetofile = 
        fun (arg: Timers.ElapsedEventArgs ) ->
            lock localdata_.lock_ ( fun () -> 
             if closed_ = false then
                for elem in localdata_.elements_ do
                    serializer.write(elem, writer_)
             )  

    do 
        timer_.Elapsed.Add(writetofile)

引发以下异常:

   ValueError at /

     

数据必须是类似QuerySet(有count和order_by)或支持列表(数据) - TicketOdds都没有

我的模特是:

 TicketOdds.objects.all()[0]

我将什么添加到模型中以使其“类似于查询”?我尝试添加

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)

出于特定目的...... 我一定错过了什么。

1 个答案:

答案 0 :(得分:2)

由于您没有发布完整的回溯错误消息。我将引导您回答您的问题。

  1. 查看source code。当data中的TableData(data, table)不可迭代时,它会引发此类错误。即__iter__未定义。
  2. 我怀疑您需要在__iter__Model中定义Model.Meta方法,因为当您拨打此电话时,可以检索到QuerySet这是一个可迭代的类:TicketOdds.objects.all()
  3. data与之前检索到的查询集一起发送到TableData(data, table)
  4. 示例:

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

    我将什么添加到模型中以使其成为&#34;类似查询集的&#34;?

    你不能制作你的模型&#34;类似查询集&#34;,而是使用上面的例子从模型中获得QuerySet