私はTastyPieの基本を理解していますが、カスタムModelResourceメソッドは私にとって非常に混乱しています。私は、ユーザのパスワードを更新するためにPATCH APIコールを作成しようとしており、データはset_password()
メソッドを実行していないため、データベースのハッシュ値ではなく生の値で更新されています。ここに私のModelResourceは次のとおりです。TastyPie Patchを使ってパスワードを更新する方法
class UserResource(ModelResource):
class Meta:
queryset = User.objects.all()
resource_name = 'user'
excludes = ['is_active', 'is_staff', 'is_superuser']
authorization = Authorization()
detail_allowed_methods = ['get', 'post', 'put', 'delete', 'patch']
filtering = {
'username': ALL,
}
authentication = ApiKeyAuthentication()
私はここにobj_update
メソッドを使用する必要があると仮定すると、実際のオブジェクトは、ユーザーテーブルに更新される前にset_password
方法でパスワードを実行するには、この書式を設定するかどうかはわからないのです。
digivampireおかげで@このため。私はここの正しい方向に向かっているように感じる。いくつかのフォローアップの質問:「仮想フィールドの定義」について詳しく説明してください。どこで実行され、どのように構成されていますか?また、 'username =' dummy 'のポイントは何ですか?また、束に入っているものを見るためにハイドレートメソッドをデバッグする方法はありますか? – bevinlorenzo
この時点では、バンドルには、シリアルシリアル化されたデータのみが含まれています。このデータから、Tastypieは完全なモデルオブジェクトを作成します。仮想フィールドでは、シリアル化された入力から読み込まれたエントリを意味しますが、実際のTastyPieやDjangoのORMフィールドではありません。単純にパスワードハッシュを計算し、クライアントが実際にハッシュを知っているかのように配置し、 'password = hash_of(raw_password)'で要求にそれを投入するだけです。 Userオブジェクトをインスタンス化するときにusernameを指定する必要があるかどうかはわかりませんでした。あなたはそうする必要はありませんので、無視してください:)。 – astevanovic
これはうまくいった!本当にありがとう! – bevinlorenzo