2011-02-09 8 views
4

内のユーザーのためのForeignKeyのフィールドを除外することはできません私は、このモデルを持っています取得:はピストン

{ 
    "title": "A test" 
    "author": { 
     "username": "menda", 
     "first_name": "", 
     "last_name": "", 
     "is_active": true, 
     "is_superuser": true, 
     "is_staff": true, 
     "last_login": "2011-02-09 10:39:02", 
     "password": "sha1$83f15$feb85449bdae1a55f3ad5b41a601dbdb35c844b7", 
     "email": "[email protected]", 
     "date_joined": "2011-02-02 10:49:48" 
    }, 
} 

また、excludeも試しましたが、どちらも動作しません。

authorのユーザ名のみを取得するにはどうすればよいですか? ありがとう!

+1

あなたのコードは私にとって正しいです。実際、私はこれがイライラすることは知っていますが、私はあなたのサンプルを正確にコピーしました。私は著者のユーザ名とタイトルだけをあなたが意図したとおりに返信しています。残りのユーザー情報は表示されません。 (あなたが持っている入れ子は、ちょうどいいところです。) – mjjohnson

答えて

2

わかりました...、そう問題は、ピストンが定義されたフィールドのセットを使用していることである。

あなたのフィールドが代わりに読むべき属性のように見えますここで指定されたネストされたフィールドではなく、別のHandlerクラスによってUserモデルに追加されます。

別のユーザーが、ここでピストンディスカッショングループに正確に同じ問題を参照:

http://groups.google.com/group/django-piston/browse_thread/thread/295de704615ee9bd

問題が明らかにピストンのシリアル化コードのバグが原因です。ドキュメントの言葉で :

ハンドラでモデルを使用することにより、ピストンは/あなたのフィールドを覚えディレクティブを除外し、その型のオブジェクトを返す他のハンドラでそれらを使用します

(上書きされない限り。)

「(上書きされない限り)」ケースが正しく処理されないようであることを除いて、どちらが良いですか。私はemitters.pyに若干の変更が問題(ライン160から193)を固定可能性があることをを考える

...(たぶん?)

if fields: 
    get_fields = set(fields) 
else: 
    if handler: 
     fields = getattr(handler, 'fields') 
    ...dostuff... 

をお読みください

if handler: 
    fields = getattr(handler, 'fields')      
if not fields or hasattr(handler, 'fields'): 
    ...dostuff... 
else: 
    get_fields = set(fields) 

emitters.pyにパッチを当ててみることに決めたら、それがトリックをするかどうか教えてください。これはdjango-pistonにパッチを当てると良いでしょう。

乾杯!

+0

すぐにパッチを当ててテストする時間がありませんが、できるだけ早くバグチケットを送信します。いい答えだ :) – Menda

0

著者のフィールドを不必要にネストしていると思います。ピストンのドキュメントから

fields = ("title", "author", ("username",)) 

class UserHandler(BaseHandler): 
     model = User 
     fields = ('name', 'posts', ('title', 'date')) 

will show the title and date from a users posts. 
+0

ありがとうございますが、どちらもうまくいきません。私は "ValueError at/api/test/1 /解凍するには1つ以上の値が必要"を取得します。私のアプローチは正しいと思います。私はPistonのドキュメントを読んでいます。「Handlersの設定」のセクションで、彼は私が使用しているものとほとんど同じ値を使用しています。 – Menda

+1

あなたはハンドラをユーザに公開しているとは思いませんか?私は、ピストンが代わりにそのハンドラのフィールドを使用している可能性があると思います。 (この記事を参照してください:http://groups.google.com/group/django-piston/browse_thread/thread/295de704615ee9bd)私はその記事で言及された振る舞いを再現できないと言っていましたが、私はあなたの例を試してみてください。私が推測していないのは、最新のバージョンのピストンを持っているかどうかを確認することです。現場での処理に古いバグがあった場合に備えて、それは固定されています... –

+0

あなたはどこにいますか?私のコードにある他のユーザーハンドラを削除すると、この問題が解決されます。私はまだピストンが完全に異なるハンドラであるため、これらのクラスを使用している理由を理解できません。あなたの回答を分離して投稿してください。私はそれを正しいものとしてマークします。助けてくれてありがとう!ところで、あなたがなぜPistonが私のUserHandlerを使用しているのか分かっていれば、TestHandlerだけでなく、本当にうれしいでしょう。 – Menda

関連する問題