Filtrage de modèles App Engine avec Django
-
05-07-2019 - |
Question
salut j'utilise le patch de moteur d'application django, j'ai configuré un modèle simple comme suit
class Intake(db.Model):
intake=db.StringProperty(multiline=False, required=True)
#@permerlink
def get_absolute_url(self):
return "/timekeeper/%s/" % self.intake
class Meta:
db_table = "Intake"
verbose_name_plural = "Intakes"
ordering = ['intake']
J'utilise les vues suivantes pour vérifier si quelque chose existe dans la base de données et l'ajouter à la base de données
from ragendja.template import render_to_response
from django.http import HttpResponse, Http404
from google.appengine.ext import db
from timekeeper.forms import *
from timekeeper.models import *
def checkintake(request, key):
intake = Intake.all().filter('intake=',key).count()
if intake<1:
return HttpResponse('ok')
else:
return HttpResponse('Exist in database')
def addintake(request,key):
if Intake.all().filter('intake=',key).count()>1:
return HttpResponse('Item already Exist in Database')
else:
data = Intake(intake=cleaned_data[key])
data.put()
return HttpResponse('Ok')
Je peux ajouter à la base de données sans problème (quand je fais un Intake.all (). count ()
cela augmente) mais quand je vérifie si la clé existe dans la base de données en filtrant je suis obtenir un compte de zéro tout le monde a aucune idée pourquoi je ne suis pas en mesure de filtrer par les clés?
La solution
Vous devez insérer un espace entre le nom du champ et l'opérateur dans vos arguments de filtre. Par exemple, utilisez .filter ('apport =')
au lieu de .filter ('apport = ')
. Avec un filtre d'égalité, vous pouvez également l'omettre complètement, comme dans .filter ('absorption')
. Sans l'espace, le signe égal fait partie du nom du champ.