tastypie随机查询集结果

时间:2014-09-02 15:20:47

标签: django sorting pagination tastypie

我一直在寻找没有找到任何相关信息的日子(或者除了文档之外还有很多一般的tastypie)......

我对一个非常简单的tastypie api返回的结果有疑问。 db有一个没有主键的表(这是一个遗留数据库,我不能修改或管理它,所以我坚持使用它)。所以,为了与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或点击浏览器上的刷新按钮),我可能会得到" world"帐户。

虽然我知道我可能会在刷新时得到不同的结果(假设模型只按date_int排序,并且有两个记录具有相同的date_int),在分页后得到不同的结果似乎是不可接受的...例如如果我去"下一个"网址:

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

我可能会收到"垃圾邮件"帐户,或者鸡蛋" ,如果我返回,即offset = 0,我会得到一个不同的帐户,即不是"你好"帐户...我可以获得任何其他帐户,但它们不会有任何明显的顺序。这使得分页无用,因为人们实际上无法覆盖整个帐户,因为在每个分页时,tastypie会提供不同的结果......

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

谢谢!

1 个答案:

答案 0 :(得分:1)

请注意Django docs

  

每个模型只需要一个字段即可使primary_key = True(或者   明确声明或自动添加)。

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

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