2013-06-28 2 views
0

Je suis un débutant dans GAE et python. J'ai de la difficulté à comprendre comment insérer des données avec une relation un-à-plusieurs et je ne sais pas grand-chose de ce que je fais. J'essaie de créer une application d'inventaire. Fondamentalement, je voulais insérer des produits dans la même catégorie chacun.Insertion de données dans le magasin de données - App Engine - Un à plusieurs

Mes modèles db sont ci-dessous. J'ai pu insérer une catégorie dans le magasin de données, mais les produits par catégorie sont là où j'ai un problème.

J'ai une forme comme ci-dessous qui est je ne suis pas sûr si c'est la bonne manière aussi. L'insertion à l'aide de la touche dans l'entrée masquée est-elle également correcte?

<form action="/addproduct" method="post"> 
     <div><label>Product Name:</label><br /><input type="name" name="name" /></div> 
     <div><input type="hidden" name="ref_category" value="{{selected_category.key()}}" /></div> 
     <input type="submit" value="Add Candidate"> 
     </form> 

Ensuite, mon code d'insertion est en dessous de ce que j'ai des problèmes. J'essaie de comprendre les ressources fournies en ligne, mais mes cellules cérébrales ne peuvent plus le traiter.

def post(self): 
     product = Product() 
     product.name = self.request.get('name') 
     product.ref_category = self.request.get('ref_category') 
     product.put() 

J'espère que quelqu'un m'aidera à comprendre quand la solution fournie.

+0

Si vous commencez un nouveau projet ou d'apprentissage moteur de l'application, je vous suggère de commencer à utiliser NDB. – Sandeep

Répondre

1

Vous tentez de définir une chaîne sur ReferenceProperty car self.request.get renvoie le type de chaîne. Le champ 'ref_category' de Product est un db.ReferenceProperty, qui prend un db.Key ou un objet Category, mais vous essayez de le définir sur une chaîne.

Vous pouvez faire comme ceci:

def post(self): 
    product = Product() 
    product.ref_category = db.get(self.request.get('ref_category')) 
    product.put() 
+0

Pas besoin de frapper la banque de données pour obtenir l'objet réel: 'db.Key (...)' fonctionnerait bien. –

+0

Wow c'est mignon! Merci beaucoup Nijin et Daniel! – goryo

Questions connexes