Appengine - как получить сущность и отобразить значения - PullRequest
0 голосов
/ 17 сентября 2010

У меня проблемы с моим проектом. У меня 2 модели

class UserPrefs(db.Model):
    user = db.UserProperty()
    name = db.StringProperty()

class Person(db.Model):
    name = db.StringProperty()
    phone = db.PhoneNumberProperty()
    userPrefs = db.ReferenceProperty(UserPrefs)

class PersonHandler(webapp.RequestHandler): 
    def get(self): 
        users.get_current_user user = () 
        if user: 
            greeting = ...... 
        else: 
            greeting = ......

        if self.request.GET.has_key ('id'): 
            id = int (self.request.get ['id']) 
            person = models.Person.get = (db.Key.from_path ('Person', id)) 

            path = os.path.join (os.path.dirname (__file__), 'templates / doStuff.html') 
            self.response.out.write (template.render (path, locals (), debug = True)) 

        def post (self): 
            if self.request.get ('Person'): 
                id = int (self.request.get ('Person')) 
                person = models.Person.get (db.Key.from_path ('Person', id)) 
            else: 
                person= models.Person = () 

            data = forms.PersonForm date = (data = self.request.POST) 
            if data.is_valid (): 
                if self.request.get ('photo'): 
                    Person.foto db.Blob = (self.request.get ('photo')) 

                person.nome self.request.get = ('name') 
                person.apelido self.request.get = ('name') 
                person.unidade self.request.get = ('unit') 

                person.put () 
                self.redirect ('/ doSomeStuff') 
            else: 
                self.redirect ('doOtherStuff')

To See the data in database i use this handler:
class SeePersonHandler (webapp.RequestHandler): 
    def get (self): 
        users.get_current_user user = () 
        if user: 
            greeting = ...... 
        else: 
            greeting = ......

        person= db.Query(models.Pocente)
        persons = person.fetch(limit = 1) 

        path = os.path.join(os.path.dirname(__file__), 'templates/SeeStuff.html')
        self.response.out.write(template.render(path, locals(), debug = True))

Вопрос: Я знаю, что данные поставлены корректно. Я использовал консоль SDK с этим URL: http://localhost:8080/_ah/admin/datastore, и объект был создан правильно. Я не знаю, что мне не хватает, чтобы вернуть уже поставленную Дадту

Мой шаблон:

{% if user %}
  {% if person%}
    <table align="center">
    <tbody>
    <tr>
      <td><input type="button" value="Criar Pessoa" onclick="redirect(3)" /></td>
    </tr>
    </tbody>
    </table>
    <table align="center">
    <tbody>
    <tr>
      <td colspan="2"><center><strong><p>O meu Curriculum Vitae</p></strong></center></td>
    </tr>
    <tr>
      <td>Nome: </td>
      <td>{{ person.name}}</td>
    </tr>
    <tr>
      <td>Apelido: </td>
      <td>{{ person.phone}}</td>
    </tr>
    <tr>
      <td></td>
      <td>
        <input type ="button" value="Editar" onclick="editarCv({{ person.key.id }})" />
      </td>
    </tr>
    </tbody>
    </table>
  {% endif %}
{% endif %}

1 Ответ

0 голосов
/ 17 сентября 2010

Ваш код немного дезорганизован.
Отладка обычно проще с помощью более организованного кода.

В любом случае, достаточно разговоров о мусоре.
Вы назначаете результат хранилищу данныхзапрос к persons ...

persons = person.fetch(limit = 1)

... но тогда в вашем шаблоне вы используете person:

<tr>
  <td>Nome: </td>
  <td>{{ person.name}}</td>
</tr>
<tr>
  <td>Apelido: </td>
  <td>{{ person.phone}}</td>
</tr>

Трудно сказать, если это ваш единственныйпроблема (я очень сомневаюсь в этом), но, возможно, вы можете попытаться исправить это и вернуться к нам.Удачи вам.

В стороне: вместо .fetch(limit=1) вы можете просто использовать .get(), как указано в документации :

get ()подразумевает «предел» 1. Максимум 1 результат извлекается из хранилища данных.

...