0

私はDjango restを初めて使い、2つのクエリセットを使用する必要があるレスポンスを返そうとしています: 最初のものは特定のプロジェクト用であり、2番目のものは特定のもの用ですこのプロジェクト内部ユーザ:django rest returnフィルタを組み合わせた結果

serializers.py

class ProjectFiltersSerializer(serializers.ModelSerializer): 
    class Meta: 
     model= Project 
     fields = ('id', 'title','users') 

views.py

class FiltersDetail(APIView): 
    """ 
    Retrieve filters instance. 
    """ 
    def get_project(self, project_pk): 
     try: 
      return models.Project.objects.filter(pk=project_pk) 
     except Snippet.DoesNotExist: 
      raise Http404 

    def get_returning_customers(self, project_pk): 
     return [(u.pk, u"%s %s" % (u.first_name, u.last_name)) for u in User.objects.filter(return=1)] 

    def get(self, request, project_pk, format=None): 
     snippet = self.get_project(project_pk) | self.get_returning_customers(project_pk) 
     serializer = ProjectFiltersSerializer(snippet, many=True) 
     return Response(serializer.data) 

I「は、2つの異なる基本モードでクエリを組み合わせることはできません取得していますls "です。 これは正しい方法ですか?

ありがとうございました

+0

を助けreturning_customers = serializer.ListField(source='get_returning_customers')

・ホープと呼ばれる、あなたのコード – e4c5

+0

をフォーマットしてくださいすることができますが、両者を組み合わせるしようとしているようですが見えます同じタイプを返さない '|'を使ってクエリを実行します。 'User'と他の' Project'インスタンスを返します。 –

答えて

2

ネストシリアライザを使用できます。詳細については:http://www.django-rest-framework.org/api-guide/relations/#nested-relationships

+0

しかし、彼らはそれらの間にいくつかの関係を持っている必要があります。それがないモデルを追加したいのですが? –

+0

@OSこれはあなたが関連するユーザーを返そうとしているようです。オブジェクトが何らかの形で関連していない場合、クエリーセットで返す理由はありません。 – tredzko

0

は、ネストされたシリアライザを作成する(それがモデルシリアライザではありません注意してください)

class ProjectCustomerSerializer(serializers.Serializer): 
    users = UserSerializer(many=True) 
    project = ProjectSerializer() 

UserSerializerとProjectSerializerしかしModelSerializersすることができます。次に、ビューで:

def get(....): 
    serializer = ProjectCustomerSerializer(data={ 
    'users': self.get_returning_customers(project_pk), 
    'project': self.get_project(project_pk), 
    }) 
    return Response(serializer.data) 

別の方法があります。あなたは、プロジェクトモデル(get_returning_customers())にメソッドを追加してProjectSerializerにフィールドを追加することができ、これは

関連する問題