Jump to content
Sign in to follow this  
Helio13

Django query avançada

Recommended Posts

Helio13

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

Share this post


Link to post
Share on other sites
Pedro C.

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.

Share this post


Link to post
Share on other sites
Helio13

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...

Share this post


Link to post
Share on other sites
Pedro C.

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.

Share this post


Link to post
Share on other sites
Helio13

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

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.