我已经(从文档或很多一般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会提供不同的结果,因此无法真正检查整个帐户...
就像我说的,我一直无法找到任何有关此信息,非常感谢您的帮助!
谢谢!