3

最初はnull値である列名ジオコードを持つエンティティがあります。データストアのジオコード列の値を更新したいと考えています。

以下のコード スニペットを使用してみましたが、うまくいきませんでした。助けてください。前もって感謝します。

データストア

class doctor(db.Model):
doctorUser=db.UserProperty()
    geocode=db.GeoPtProperty()

医師の列を更新する機能

def post(self):
    user=users.get_current_user()
    q=doctor.all().filter("doctorUser =",user)
    if q.count()==1:
        lat=self.request.get('lat')
        lng=self.request.get('long')
        code=str(lat)+", "+str(lng)
        q[0].geocode=code
        q[0].put()

解決した

これが私が行った変更で、うまくいきました!

def post(self):
    user=users.get_current_user()
    q=doctor.all().filter("doctorUser =",user)
    qo=q.get()
    if q.count()==1:
        lat=self.request.get('lat')
        lng=self.request.get('long')
        code=str(lat)+", "+str(lng)
        qo.geocode=code
        qo.put()
4

1 に答える 1

1

クエリ オブジェクトを処理しようとしています。クエリをフェッチまたは反復処理するか、get() を使用して結果を取得する必要があります。使用しているクエリは、複数の結果を返す可能性があります。の一意の値を確保するためのロジックが他の場所にある場合を除きますdoctorUser

また、ループに入る前に、リクエストから緯度/経度を取得します。

また、列名の観点からデータストアとモデルについて考えるのもやめるべきです。これらはエンティティの属性であり、appengine データストアには列がありません。

元の質問を更新したソリューションは機能する可能性がありますが、非効率的です。たとえば、エンティティを取得してから同じクエリを再実行する count() を実行します。もう少し効率的になるように書き直しましたが、まだ潜在的な問題があります (複数のレコードが一致するなど)。doctorUser = user

def post(self):
    user=users.get_current_user()

    if user:  # if user not logged in user will be None

       qo=doctor.all().filter("doctorUser =",user).fetch(10)

       if len(go) > 1:
           raise ValueError('More than one doctorUser matches')

       if go:
           lat=self.request.get('lat')
           lng=self.request.get('long')
           code=str(lat)+", "+str(lng)
           qo.geocode=code
           qo.put()
于 2013-11-04T23:42:42.897 に答える