2014-09-02 68 views
0

我已经(从文档或很多一般tastypie的,预留)搜索几天都没有找到任何这信息...tastypie随机查询集导致

我在与结果的问题这是由一个非常简单的tastypie api返回。数据库有一个没有主键的表(这是一个遗留数据库,我不能修改或管理它,所以我坚持使用它)。因此,为了与Django的工作,我给自己定的众多:

primary_key=True 
其中结合示范田

,构成了一个唯一的标识符。所以,这里的模型是什么样子:

class ClientAccount(models.Model): 
    dt = models.DateField() 
    date_int = models.IntegerField(primary_key=True) 
    account = models.CharField(max_length=9, primary_key=True) 
    product = models.CharField(max_length=5,primary_key=True) 
    amount = models.IntegerField() 
    class Meta: 
     db_table = 'client_account' 
     managed = False 
     ordering = ['-date_int'] 

这里的一些数据(格式为伪JSON为简单起见):

{ 
    dt=2014-08-29 
    date_int=20140829 
    account='hello' 
    product='rice' 
    amount=10 
} 

{ 
    dt=2014-08-29 
    date_int=20140829 
    account='world' 
    product='rice' 
    amount=20 
} 

{ 
    dt=2014-08-29 
    date_int=20140829 
    account='spam' 
    product='rice' 
    amount=10 
} 

{ 
    dt=2014-08-29 
    date_int=20140829 
    account='eggs' 
    product='rice' 
    amount=20 
} 

{ 
    dt=2014-08-29 
    date_int=20140829 
    account='foo' 
    product='beans' 
    amount=5 
} 

这是API:

class ClientResource(ModelResource): 
    class Meta: 
     queryset = ClientAccount.objects.all() 
     resource_name = 'client/account' 
     filtering = { 
      'date_int': ALL, 
      'product': ALL, 
     } 

现在,当我打电话的API url如下:

http://127.0.0.1:8000/api/v1/client/account/?product=rice&format=json&offset=0&dt=2014-08-29&limit=1 

我说,“你好”的帐户。如果我刷新(按F5或点击浏览器上的刷新按钮),我可能会得到“世界”帐户。

虽然我得到,我可能会得到不同的刷新结果(鉴于该模型只按date_int排序,并有两个记录具有相同的date_int),似乎也许不能接受分页后得到不同的结果... for例如,如果我去了“下一个”网址:

http://127.0.0.1:8000/api/v1/client/account/?product=rice&format=json&offset=1&dt=2014-08-29&limit=1 

我可能会收到“垃圾邮件”帐户或“蛋”,如果我分页回来,即偏移量= 0,我会得到一个不同的账户,即不是“你好”账户......我可能会得到任何其他账户,但他们不会有任何明显的顺序。这使得分页无效,因为在每个分页中,tastypie会提供不同的结果,因此无法真正检查整个帐户...

就像我说的,我一直无法找到任何有关此信息,非常感谢您的帮助!

谢谢!

回答

1

注意Django docs

每个模型只需要一个字段,让primary_key =真(无论是 显式声明的或自动添加)。

即我期望问题是您的Django模型定义有多个primary_key=True字段,而不是Tastypie。

feature request to remedy this is tracked但它不会及时降落解决您的眼前的问题。