DjangoのSerialierでfieldsを_all_指定するのではなく、exceptを使って取り除きたいとき
今回はDjango Rest Frameworkにおいてserializerを使うときにfieldsを_all_指定するのではなく、fieldの一部を取り除きたいときどのようにすれば良いのかについてご紹介いたします。
DjangoのSerialierでfieldsを_all_指定するのではなく、exceptを使って取り除きたいとき
Django Rest Frameworkにおいてserializerを使うときにMETAに対してmodelのすべてのfieldについて取得したいとき、
1 2 3 4 5 |
class TestSerializer(serializers.ModelSerializer): class Meta: model = TestModel fields = '__all__' |
というやり方をすることがあると思います。
しかし上記だとfieldすべてを取得したり、TestModelの中から数個程度のfieldを指定するときはやりやすいのですが、例えばTestModelのfieldが20個くらいあり、そのうちの1個を除いた19個を対象としたいときなどに不便です。
書くことは可能ですが、ソースコードでfieldを羅列するのが大変ですし、何があって何がないのかすぐには分かりません。
そんな時は、excludeを指定してやりましょう。
1 2 3 4 5 |
class TestSerializer(serializers.ModelSerializer): class Meta: model = TestModel exclude = ('created_at', 'updated_at', ) |
こうすることによって例えば上記の例では、TestModelのfieldが20個くらいあったときに「created_at」と「updated_at」を取り除いた18個のfieldを返すことができます。
ちなみにfieldsとexcludeの両方を指定してしまうと下記のエラーが出てしまうため注意しましょう。
1 |
AssertionError: Cannot set both 'fields' and 'exclude' options on serializer TestSerializer. |
終わりに
今回はDjango Rest Frameworkにおいてserializerを使うときにfieldsを_all_指定するのではなく、fieldの一部を取り除きたいときどのようにすれば良いのかについてご紹介いたしました。
ディスカッション
コメント一覧
まだ、コメントがありません