2

私は次のリソースを持っています:

class MachineResource(ModelResource):
manager = fields.ToOneField(UserResource, 'manager',full=True)
class Meta:
    queryset = Service.objects.filter(service_type='machine')
    resource_name = 'machine'

これは正常に機能します。そして、マシンのリストと、それぞれに埋め込まれたユーザーオブジェクト(マネージャー)を返します。

ただし、マネージャーユーザーから2〜3個のフィールドが必要なのは1つだけです。たとえば、マネージャーのソルトパスやその他のプライベートデータを含めたくありません。

私が見る限り、これを簡単に行う方法はありませんか?

4

2 に答える 2

2

django-tastypieのクイックスタートセクションをご覧ください。そこに完璧な例があります。(「マネージャー」)のModelResourceサブクラスを定義するときは、表示したくないフィールドのリストに属性が設定されたクラスを追加するだけです。UserMetaexclude

class UserResource(ModelResource):
    class Meta:
        queryset = User.objects.all()
        resource_name = 'auth/user'
        excludes = ['email', 'password', 'is_superuser']
于 2011-12-07T22:06:09.673 に答える
2

私は個人的に、同じModelクラスに対して2つのを作成するという概念はModelResource少しエレガントではないと感じています。たとえば、のUserResource一部として完全なオブジェクトとして表示されている間ではなく、の詳細ビューに電子メールフィールドを表示したいとしますMachineResource。私があなたの問題を解決する方法は、メソッドの埋め込みオブジェクトのデータディクショナリにある不要なフィールドのキーを削除することですdehydrate。少しハッキーな方法かもしれませんが、私にとっては問題なく動作します。あなたの場合、あなたはすることができます:

class MachineResource(ModelResource):
    manager = fields.ToOneField(UserResource, 'manager',full=True)

    class Meta:
        queryset = Service.objects.filter(service_type='machine')
        resource_name = 'machine'

    def dehydrate(self,bundle):
        del bundle.data['manager'].data['email']
        return bundle
于 2013-03-23T19:13:02.197 に答える