Pour un service web fictif, j'ai écrit une petite application Django, qui sert d'API web, que mon application Android interroge. Lorsque je fais des requêtes à l'API, je peux aussi transmettre un offset et une limite pour avoir seulement les données réellement nécessaires. Quoi qu'il en soit, j'ai rencontré le problème, que Django me donne des résultats différents pour la même requête à l'API. Il semble que les résultats sont retournés round robin.Pourquoi Django me donne-t-il des résultats différents pour la même requête?
Ce code Django qui sera exécuté:
def getMetaForCategory(request, offset, limit):
if request.method == "GET":
result = { "meta_information": [] }
categoryIDs = request.GET.getlist("category_ids[]")
categorySet = set(toInt(categoryIDs))
categories = Category.objects.filter(id__in = categoryIDs)
metaSet = set([])
for category in categories:
metaSet = metaSet | set(category.meta_information.all())
metaList = list(metaSet)
metaList.sort()
for meta in metaList[int(offset):int(limit)]:
relatedCategoryIDs = getIDs(meta.category_set.all())
item = {
"_id": meta.id,
"name": meta.name,
"type": meta.type,
"categories": list(categorySet & set(relatedCategoryIDs))
}
result['meta_information'].append(item)
return HttpResponse(content = simplejson.dumps(result), mimetype = "application/json")
else:
return HttpResponse(status = 403)
Qu'est-ce qui se passe est la suivante: Si tous les objets MetaInformation
seraient Foo
, Bar
, Baz
et Blib
et je fixer la limite à 0:2
, puis J'obtiendrais [Foo, Bar]
avec la première demande et avec la même demande exactement la méthode retournerait [Baz, Blib]
quand je l'exécuterais pour la deuxième fois.
Est-ce que quelqu'un voit ce que je fais mal ici? Ou est-ce le cache de Django qui m'empêche de faire quelque chose?
Pourriez-vous d'abord résoudre votre problème? Vous avez une question sur les requêtes. essayez d'éliminer le reste de la logique de vue. Sur une note de côté: le require_GET est grand (trouvé dans django.views.decorators.http) – tback
Le problème de base est, que j'obtiens des résultats différents sur la même requête. Mais comme Daniel a dit que c'est probablement dû à mon utilisation des ensembles. Avec ce long post, je voulais juste donner autant d'informations générales que possible. – philgiese