【问题标题】:Getting one of the key's fields instead of the full key获取密钥字段之一而不是完整密钥
【发布时间】:2013-07-15 12:35:39
【问题描述】:

我有一个候选模型

class Candidate(ndb.Model):
    name = ndb.StringProperty()
    phone = ndb.StringProperty()
    location_name = ndb.StringProperty()
    state = ndb.KeyProperty(kind=Setting)

模型称为提交状态

class SubmissionState(ndb.Model):
    name = ndb.StringProperty(required=True)
    description = ndb.TextProperty()

模型设置用于根据用户选择的类别处理设置。所有这一切都很好。

这里是views.py。还有一个 post 方法,但我不确定这里是否有必要。

class EditSubmission(webapp2.RedirectHandler):

    def get(self):
        candidateid = self.request.path.split('/')[-1]
        candidate = Candidate._get_by_id(int(candidateid))
        template_values = {'candidate': candidate, }
        path = os.path.join(os.path.dirname(__file__), '../templates/edit_submission.html')
        self.response.write(template.render(path, template_values))

这里是模板部分:

    <tr>
        <th><label for="id_state">Submission State:</label></th>
        <td><input id="id_state" type="text" name="state" value="{{ candidate.state.name }}"/></td>
    </tr>

如果我这样做 {{ candidate.state }} 我会得到密钥和所有字段,但由于某种原因我不能只得到名称。我该怎么做?

谢谢。

【问题讨论】:

    标签: google-app-engine google-cloud-datastore webapp2


    【解决方案1】:

    candidate.state 只是指向 SubmissionState 的键。您的应用需要向数据存储区发出另一个请求以获取 SubmissionState 实体,如下所示:

    state_name = candidate.state.get().name
    

    您可以在您的处理程序中执行该 get(),然后将 state_name 添加到您的模板值中,以便它在模板中可用。

    【讨论】:

      猜你喜欢
      • 2019-10-01
      • 2015-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-26
      • 2019-10-15
      • 2018-11-29
      • 1970-01-01
      相关资源
      最近更新 更多