2016-05-24 13 views
3

私はモデルに関連付けられていないフィールドを持つフォームを持っています。私はREST API(django-rest-framework)を使って等価物を実装すると仮定しますが、シリアライザに関連付けられていない追加のフィールドを渡す必要がありますか?それ、どうやったら出来るの?Django Rest Frameworkでシリアライザフィールドに関連付けられていないパラメータはどのように渡しますか?

追加フィールドがnumber_of_pagesであるとします。私はそれをいくつかの計算に使用します。どのようにしてREST呼び出しでそれを渡すことができますか?

+1

どのフレームワークが 'django-tastypie'' django-rest-framework'や他のフレームワークを使っていますか? 'django-tastypie'を使用している場合、' hydrate'メソッドはあなたが探しているものです – Pavan

+0

django-rest-framework – nilanjan

答えて

0

django-rest-frameworkを使用している場合は、SerializerMethodField()を使用してApiの追加フィールドを渡すことができます。以下に例を挙げます。

class UserGroupSerializer(serializers.ModelSerializer): 
""" 
    This Serializer pass additionl field count. by using SerializerMethodField() 
""" 
count = serializers.SerializerMethodField() 

class Meta: 
    model = UserGroup 

def get_count(self,obj): 
    """return length of group""" 
    return Groupmember.objects.filter(user_group=obj.id).count() 

とビューで

serializer_class = UserGroupSerializer 

を使用しています。

私はそれがあなたを助けることができると思います。

おかげ

+0

残りのAPIを呼び出すとデータはどのように渡されますか? jsonの外観はどうですか? – nilanjan

+0

djnago-rest-framework?を使用していますか?あなたの必要条件django-rest-frameworkを使っているなら、このリンクを見てください。 http://www.django-rest-framework.org/tutorial/quickstart/ –

+0

どのデータをAPI呼び出しで渡したいですか? –

2

あなただけのフィールドを追加し、DjangoRestFrameworkからModelSerializerを使用している場合。

デフォルトでは、モデルフィールドのみが追加されますが、問題を引き起こす可能性がある唯一のものは何もありません(テストしませんでした)。モデルの作成または更新中にフィールドが多すぎる可能性がありますそのような場合は、save()を呼び出す前にcreate()およびupdate()メソッドのフィールドを削除する必要があります。

class MyModelSerializer(serializers.ModelSerializer): 
    number_of_pages = fields.IntegerField() 

    # this I'm not sure if needed 
    def create(self, validated_data): 
     validated_data.pop('number_of_pages') 
     return super(MyModelSerializer, self).create(validated_data) 

    def update(self,instance, validated_data): 
     validated_data.pop('number_of_pages') 
     return super(MyModelSerializer, self).update(instance, validated_data) 
    # end 

    class Meta: 
     fields = ('mymodelfield_1', 'mymodelfield_2', 'number_of_pages') 
     model = MyModel 
+0

この 'fields'は' django.db.models'のものですか? – Caco

+0

何かを見逃してしまったようです。私はエラーが発生します: 'django.core.exceptions.ImproperlyConfigured:フィールド名 'number_of_pages'はモデル 'MyModel'には無効です。 ' – Caco

+0

これは機能します。しかし、私の場合、余分なフィールドはオプションであるため、 'number_of_pages = fields.IntegerField(required = False)'のように、余分なフィールドの宣言に 'required = False'を追加しました。ブーリアンなので、私のためには、 'default = fields.BooleanField(required = False)'をしました。これをしないでください。エラーが発生します: '' QuestionnaireLanguage 'オブジェクトには' is_default '属性がありません。 – Caco

関連する問題