2011-12-07 19 views
1

に真=フルでToManyFieldのフィールドを制限することができます。そして、それぞれのマシンに組み込みユーザーオブジェクト(マネージャー)のリストを返します。は、どのように私は次のリソースを持っているジャンゴ - tastypie

ただし、私はマネージャーのユーザーから1〜2フィールドしか必要としません。私はマネージャーのパスと他の私的なデータを含むことを望んでいません。

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

答えて

1

私は個人的には少し洗練同じモデルクラスのための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 
1

Quick Start section for django-tastypieをご覧ください。そこに完璧な例があります。 User(あなたの「マネージャ」)のModelResourceサブクラスを定義するときは、表示したくないフィールドのリストにexclude属性を設定してMetaクラスを追加するだけです。

class UserResource(ModelResource): 
    class Meta: 
     queryset = User.objects.all() 
     resource_name = 'auth/user' 
     excludes = ['email', 'password', 'is_superuser'] 
+0

ああ、これは意味があります。それは、私がMachineResourceに埋め込むために特に別のUserResourceを作成する必要があることを意味します(私はMachineResourceクラスで除外したいものに異なるフィールドを除外した一般的なUserResourceクラスを既に持っています)。 –

+0

これは、いくつかのURLからアクセス可能なUserResourceの冗長なバリアントを必要としないので、避けたいものです。どういうわけかそのURLを削除できると思います...? –

+1

'リソース'は自動的にURLを取得しません。あなたは 'urls.py'でそれらを接続しなければなりません。特に 'full = True'を実行している場合は、それ自体のURLは必要ありません。 –

関連する問題