2011-11-22 6 views
6

Aggiornamento: Ho notato che le entità vengono salvate (e disponibili nel Datastore Viewer) quando le salvo usando le viste (e la funzione create_object). Ma quando uso shell (shell di gestione.py) per creare e salvare una nuova entità, non viene commesso nella memoria (ma può ancora essere visto in Tes.objects.all()).Salvataggio di entità in django-nonrel con google appengine


ho iniziato a giocare con il Django-nonrel con Google AppEngine e io sono sempre frustrati dalla cosa semplice come il salvataggio Entità.

Ho impostato il mio ambiente come descritto in instruction. Sono riuscito a eseguire l'applicazione di esempio e funziona bene. Mi piacerebbe estenderlo in modo da salvare la mia entità nello spazio di archiviazione. Per farlo:

  1. ho aggiunto nuovo modulo django con models.py:

    from django.db import models 
    
    class Tes(models.Model): 
        name = models.CharField(max_length=150) 
    
  2. ho creato uno script per risparmiare un po 'di dati:

    import os 
    import sys 
    sys.path.append("d:\\workspace\\project\\") 
    os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' 
    from testmodule.models import Tes 
    t = Tes(name="test") 
    t.save()  
    tes = Tes.objects.all() 
    for t in tes: 
        print t.name 
    

Lo script corre senza errori. Quando lo eseguo alcune volte uno dopo l'altro, stampa sempre più stringhe "di prova". Ma quando provo a eseguirlo dopo un minuto di pausa, lo Tes.objects.all() non restituisce nulla. Durante questo periodo il file del datastore cambia dimensione (ma forse è solo una specie di log). Quando guardo lo http://localhost:8000/_ah/admin/datastore posso selezionare solo AhAdminXrsfToken dal campo di selezione.

In ogni caso, cosa mi manca? Dove posso trovare qualche tipo di registro che mi direbbe cosa c'è che non va?

risposta

4

Questo è un trucchetto che causa molta confusione. Dal djangoappengine docs:

Inoltre, mai eseguito manage.py runserver insieme ad altri la gestione comandi allo stesso tempo. Le modifiche non avranno effetto. Questa è una limitazione dello SDK App Engine dello che potrebbe essere corretta in una versione successiva.

Quindi non è possibile fare manage.py runserver e manage.py shell allo stesso tempo. Se lo fai, le modifiche al datastore in uno non saranno visibili nell'altro. C'è un blocco sul datastore locale applicato dall'SDK App Engine.Assicurati di aver fermato il server prima di avviare la shell.

-1

Non è possibile che sia t.put() se si crea un'entità anziché salvarla? Io uso put() per creare un'entità e funziona per me. E se importi django, potresti voler sapere che ci sono alternative al django come la mia scelta GAE + Jinja2 + WTForms, specialmente ora che google.db.djangoforms è deprecato selezionando un framework per moduli, un motore di template e forse un framework db e non devi importare Django che spesso ti costringe a importare molto più del necessario.

Quindi la mia raccomandazione è di evitare import django... e utilizzare invece Jinja2 + WTForms. Se vuoi davvero django sul motore di app, allora potresti voler controllare il progetto www.allbuttonspressed.com che abilita tutto il motore di google per google django ma assicurati di aver bisogno di questo django quando sospetto che tutto ciò di cui abbiamo bisogno sia un motore di template e una struttura formale e possiamo fare a meno di Django.

+1

Questo davvero non risponde alla domanda. –

+0

"Cosa mi manca?" è stato chiesto e la mia risposta è la differenza tra salvare e creare. Quello che sto cercando di dire è che può essere la differenza tra salvare e creare usando save() e put() e che ci sono buone alternative al django completo. –