에 액세스 할 수있는 가장 좋은 방법은 내가이 모델을했습니다NDB Jinja2의 KeyProperty
class Team(ndb.Model):
name = ndb.StringProperty()
password = ndb.StringProperty()
email = ndb.StringProperty()
class Offer(ndb.Model):
team = ndb.KeyProperty(kind=Team)
cut = ndb.StringProperty()
price = ndb.IntegerProperty()
class Call(ndb.Model):
name = ndb.StringProperty()
called_by = ndb.KeyProperty(kind=Team)
offers = ndb.KeyProperty(kind=Offer, repeated=True)
status = ndb.StringProperty(choices=['OPEN', 'CLOSED'], default="OPEN")
dt = ndb.DateTimeProperty(auto_now_add=True)
나는이보기
class MainHandler(webapp2.RequestHandler):
def get(self):
calls_open = Call.query(Call.status == "OPEN").fetch()
calls_past = Call.query(Call.status == "CLOSED").fetch()
template_values = dict(open=calls_open, past=calls_past)
template = JINJA_ENVIRONMENT.get_template('templates/index.html')
self.response.write(template.render(template_values))
및
{% for call in open %}
<b>{{call.name}} {{call.called_by.get().name}}</b>
{% endfor %}
이제이 작은 테스트 tempalte, 와를했습니다 get()
완벽하게 작동합니다.
내 질문 : 이 맞습니까? 더 좋은 방법은 없습니까? 개인적으로 나는 get()
템플릿의 값이 이상하다는 것을 알았고 뷰 내부에서 값을 가져오고 싶습니다.
- 전화 calls_open의 모든 통화에 대해 to_dict()
dict_call = call.to_dict()
- 는 다음 dict_call
dict_call['team'] = call.team.get().to_dict()
- 개체를 추가 할당을 새 목록
res_open_calls=[]
- 을 만듭니다
내 생각은했다 목록에
res_open_calls.append(dict_call)
- 다음이 방금 생성 된 목록을 반환합니다.
이것은 (수정 코드) 내가 쓴 요지 https://gist.github.com/esseti/0dc0f774e1155ac63797#file-call_offers_calls
더 깨끗 보이지만 약간 비싼 (제리스트가 생성되어야한다)이다. 거기에 더 나은/영리한 무언가가 있습니까?
'호출'엔티티가 아니라 '팀'과 '오퍼'만 표시합니다. 나는보기에 템플릿이 아니라보기에 실제 논리가 있도록 기본 설정에 동의하지만 주어진 정보를 사용하면 도움이되지 않으므로 pls가 Q를 편집하여 전체 정보를 제공합니다. 감사합니다! –
BTW, 아마도'Call' 엔티티에 의존하는 최상의 솔루션은 모델의 계산 된 속성 또는 인스턴스 메소드 일 수 있습니다. 이것은 다소 ndb 형식의 버크지만, 종종 내 개인적인 선호도입니다 :-) –
@AlexMartelli 내 나쁜, 모델 및 내가 쓴 코드의 GIST를 추가하십시오. – EsseTi