1

私はプロファイルクラスを持っています:

class profile(db.Model):
  user = db.stringProperty()
  # Other properties ...
  access = db.ListProperty(db.keys)

class apps(db.Model):
  name = db.StringProperty()

プロファイル クラスはしばらく静かでしたが、最近、アプリのキーを格納するアクセス フィールドを追加しました。現在、アプリにプロファイル権限を追加していますが、アクセス フィールドはモデルで更新されません。

これはローカルホストでは完全に正常に動作しますが、サーバーでこれを更新すると、「'NoneType' object has no attribute 'access'」というエラーが表示されます。同じ状況に遭遇した人はいますか?

更新: プロファイル クラスのオブジェクトの 1 つが None として返されていることがわかりました。これは、localhost ではプロファイル オブジェクトを取得するが、サーバーでは None を取得するコードです。

 liuser = users.User(request.POST['user']) 
 #request.POST['user'] gets user Gmail ID, which is being converted to user object
 profiles=Profile.all().filter(" user =", liuser).get()
 userprofile=profiles

 #tried below code which returns "'NoneType' object has no attribute 'access'" on server, the same gets a profile object on localhost
 if not hasattr(userprofile, "access"): 
    userprofile.access=[]

@Robertは、フォーマットがうまくいくことを願っています。

ありがとうサイ・クリシュナ

4

2 に答える 2

1

これを修正することができました。問題は、gmail ユーザーに @gmail.com を追加しない users.User オブジェクトにありましたが、ドメイン名を持つ他のドメインを受け入れますが、None Type オブジェクトをスローしていました

助けてくれてありがとう

于 2010-11-18T09:04:12.397 に答える
0

モデルにプロパティを追加しても、データストアにあるモデルの既存のインスタンスは、そのプロパティを自動的に取得しません。

アクセスの存在を確認するには、プロファイル エンティティと対話するハンドラー コードを変更する必要があります。Pythonのhasattr機能で十分です。このようなもの:

a_profile = profile.all().somequerystuffheretogetaninstance().get()
if a_profile is not None:
    if not hasattr(a_profile, "access"):
        a_profile.access = whateveryourdefaultdatais
    # perform my data logic normally after this, but remember to persist
    # this to the datastore to save the new access property.
于 2010-11-16T19:36:35.610 に答える