2

ヒントをありがとう。多分私はそれをもう少しうまく説明するためにこれを編集することができます...

すでに送信されている各タイプのすべての評価を取得するために GQL クエリを実行したい Google App Engine 用のアプリケーションを作成しています。ユーザーがリンクをクリックして個々の評価を編集し、変更を送信できるようにしたいと考えています。これは私が見つけた最良の方法です...

class EvaluationApproval(webapp.RequestHandler):
   def get(self):
      #search for unapproved general evaluations
      query = db.GqlQuery("SELECT * FROM GeneralAssessmentReport WHERE Approved = False")

      if query.count() != 0:
         for item in query:
            #create a link to edit that item
            self.response.out.write('<a href="generalFromApprove?key=%s">%s</a>' % (item.key(), item.Name))


    #do this for each type of evaluation...

    query = db.GqlQuery("SELECT * FROM HeadNeck WHERE Approved = False")
    if query.count() != 0:
        for item in query:
            self.response.out.write('<a href="headNeckApprove?key=%s">%s</a>' % (item.key(), item.Name))

    query = db.GqlQuery("SELECT * FROM lowerExtremity WHERE Approved = False")
    if query.count() != 0:
        for item in query:
            self.response.out.write('<a href="lowerApprove?key=%s">%s</a>' % (item.key(), item.Name))

そのため、ユーザーがリダイレクト先のリンクをクリックすると...

class GeneralFormApprove(webapp.RequestHandler):
   def get(self):
      # get the correct evaluation to approve
      key = self.request.get('key')
      item = GeneralAssessmentReport.get(key)

      #write out the form with key in the form action!
      self.response.out.write('<form method="POST" action="/generalFormApprove?key=%s">' % key)
      self.response.out.write(GeneralAssessmentReportForm(instance=item))

   def post(self):
      # get the key once more
      key = self.request.get('key')

      data = GeneralAssessmentReportForm(data=self.request.POST,instance=GeneralAssessmentReport.get(key))
      if data.is_valid():
         # save the edited evaluation
         entity = data.save(commit=False)
         entity.put()

次に、評価の種類ごとにWhateverFormApproveクラスを用意します。これは理にかなっていますか?これを達成するための他のアイデアはありますか?

4

1 に答える 1

0

既存のエンティティを編集するには、エンティティの ID を含む URL パターンを使用することをお勧めします。投稿時に、id を使用してエンティティをロードし、それをフォームのインスタンス引数で使用できます。

URL パターンは次のようなものです。

r'^evaluationapproval/(?P<item_id>[\d]+)/$'


def post(self,item_id=None):
    item = None
    if item_id:
        item = db.get(db.Key.from_path('MyModelKind',int(item_id)))
        #...
于 2012-06-18T17:46:30.883 に答える