Helio13 Posted September 26, 2013 at 03:18 PM Report #526125 Posted September 26, 2013 at 03:18 PM Oi Estou a tentar uma consulta avançada, assim: result = json.dumps([a.get_json() for a in Player.objects.filter((Q(name=namepost) or Q(surname="Coimbra")))]) return HttpResponse(result, content_type='application/json') Na minha class tenho isto def get_json(self): return { 'name': self.name, 'surname': self.surname, 'country': [{'name': b.name} for b in self.country] } Mas está a dar me o seguinte erro: Not a query object: (AND: ('name', u'Rui')). Did you intend to use key=value? Alguém sabe o porque? O que estou a fazer mal? Se eu fizer assim result = json.dumps([a.get_json() for a in Player.objects.filter(name=namepost)]) Funciona correctamente Obrigado
Pedro C. Posted September 30, 2013 at 04:02 PM Report #526785 Posted September 30, 2013 at 04:02 PM Acho que é por causa da definição de dicionário que usas dentro do teu dicionário de return. Melhor dizendo nesta linha de código: 'country': [{'name': b.name} for b in self.country] Eu aconselharia a extender o código. def get_json(self): dic = {} dic['name'] = self.name dic['surname'] = self.surname dic['country'] = {} # Acho que aqui aparece a primeira dificuldade pois o dicionario tem de existir para se acrescentar mais elementos. for b in self.country: dic['country'][self.name] = b.name # E aqui parece-me que no teu codigo estas sempre a utilizar a mesma key. Ou melhor a chamada de todos os objectos e igual. return dic Ate porque é dificil ler código excessivamente compactado. Nos comentários estão os bocados que eu penso poderem estar a dar problemas no teu código original.
Helio13 Posted October 1, 2013 at 04:56 PM Author Report #527056 Posted October 1, 2013 at 04:56 PM Oi Pedro. Sim, percebi o que querias dizer e fiz como sugeriste...mas para a query result = json.dumps([a.get_json() for a in Player.objects.filter(name=namepost)]) Funciona correctamente, mas para a outra query result = json.dumps([a.get_json() for a in Player.objects.filter((Q(name=namepost) | Q(surname="Coimbra")))]) Continua a dar o mesmo erro que referi no 1º post... Não sei o que estou a fazer mal...
Pedro C. Posted October 2, 2013 at 01:58 PM Report #527215 Posted October 2, 2013 at 01:58 PM Hélio, As chamadas que meteste são iguais excepto na argumentação que fazes de uma função numa classe Player.objects.filter(...). Numa metes um objecto chamado namepost, noutro metes uma tupla. Eu não sei se essa função aceita os dois (se não verificaste verifica, pois é o resultado dessa função que estás a processar com o get_json()). O erro que te dá "Not a query object" não é um que eu reconheça. Se num caso funciona mas no outro não então provavelmente é o que indiquei acima. Caso contrário eu extenderia um pouco o código para tentar perceber onde exactamente é que acontece a incompatibilidade.
Helio13 Posted October 2, 2013 at 02:21 PM Author Report #527216 Posted October 2, 2013 at 02:21 PM Obrigado pela ajuda Pedro. Já consegui resolver o problema, as querys estavam bem feitas, o problema estava o Q Que eu estava a importar o Q do django e como estou a trabalhar com o mongoengine para comunicar com o mongodb, tinha que importar o Q do mongoengine...era por isso que não dava. Cumprimentos
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now