4

私はこのモデルを持っています:

# models.py
from django.contrib.auth.models import User

class Test(models.Model):
    author = models.ForeignKey(User, related_name="tests")
    title = models.CharField(_("title"), max_length=100)

次にapi、django ピストン Web サービスのフォルダーで:

class TestHandler(BaseHandler):
    allowed_methods = ("GET")
    model = Test
    fields = ("title", ("author", ("username",)))

    def read(self, request, id):
        base = self.model.objects
        try:
            r = base.get(pk=id)
            return r
        except:
            return rc.NOT_FOUND

この Web サービスを呼び出すと、次のようになります。

{
    "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": "b@a.as", 
        "date_joined": "2011-02-02 10:49:48"
    },
}

も使用しようとしましexcludeたが、どちらも機能しません。

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

4

2 に答える 2

2

さて、問題は、ここで指定されたネストされたフィールドではなく、別の Handler クラスによって User モデルで定義されたフィールドのセットを Piston が使用していることです。

別のユーザーは、ここのピストン ディスカッション グループでまったく同じ問題を参照しています。

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

この問題は、Piston のシリアル化コードのバグによって引き起こされているようです。ドキュメントの言葉で:

ハンドラーでモデルを使用することにより、Piston はフィールド/除外ディレクティブを記憶し、そのタイプのオブジェクトを返す他のハンドラーでそれらを使用します (オーバーライドされない限り)。

「(オーバーライドされない限り)」ケースが正しく処理されていないように見えることを除いて、これはすべて良いことです。

私はemitters.pyのわずかな変更が問題を解決するかもしれないと思います(行160-193)...

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

どちらを読むべきですか(おそらく?)

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

もしあなたがemitters.pyにパッチを当てることに決めたなら、それでうまくいくかどうか私に知らせてください - django-pistonでこれにパッチを当てるのは良いことです.

乾杯!

于 2011-02-10T23:50:14.650 に答える
0

author フィールドを不必要にネストしていると思います。

fields 属性は代わりに次のように読む必要があるようです:

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

ピストンのドキュメントから...

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

will show the title and date from a users posts.
于 2011-02-09T15:36:27.113 に答える