Eu criei meu próprio recurso em meuAPI Django-Tastypie. Eu tenho implementado algumas operações de resto e agora gostaria de implementar meu paginador personalizado, que irá gerar valores next / prev com base em uma "chave" passada por url.
O problema é: se eu passar um valor como "http: localhost: 8000 / api / stats / list / nextpage /", o obj_get é chamado automaticamente e não me deixa retornar uma lista de valores, apenas um valor.
Então, eu quero que obj_get retorne mais de um valor. Meu api.py é assim:
Minha classe de recursos:
class CountryCountResource(Resource):
countryName= fields.CharField(attribute="countryName")
countryCount = fields.FloatField(attribute="countryCount")
class Meta:
resource_name = "country/list"
object_class = dict2obj
include_resource_uri = False
authorization = DjangoAuthorization()
authentication = BasicAuthentication()
def detail_uri_kwargs(self, bundle_or_obj):
kwargs = {}
if isinstance(bundle_or_obj, Bundle):
kwargs["pk"] = bundle_or_obj.obj.countryName
else:
kwargs["pk"] = bundle_or_obj.countryName
return kwargs
def obj_get_list(self, request=None, **kwargs):
db = MySQLdb.connect(host="xxxxxx",user="xxx",passwd="xxx",db="xxx")
cur = db.cursor()
cur.execute("SELECT count(*) FROM users")
total_users=cur.fetchall()
for item in total_users:
totalint=int(item[0])
cur.execute("SELECT country,count(country) FROM users GROUP BY country ORDER BY count(country) DESC LIMIT 0,10")
#ordered tuple
mylist=cur.fetchall()
newlist=[]
for i in mylist:
auxd={}
auxd["countryName"]=str(i[0])
res=int(i[1])/float(totalint)
res="%.2f" % res
auxd["countryCount"]=res
newlist.append(dict2obj(auxd))
db.close()
return newlist
def obj_get(self, request=None, **kwargs):
return newlist <<<<<<------- DONT WORK
Qualquer ideia?
Respostas:
0 para resposta № 1Eu recomendo usar ou personalizar o comportamento do paginador que vem com qualquer ModelResource
por padrão: http://django-tastypie.readthedocs.org/en/latest/paginator.html