2016-07-27 3 views
0

ネストされたオブジェクトの配列でListViewを作成したいとします。ここで私はこれまで試したどのような:RESTフレームワーク:オブジェクトをシリアライズする方法は?

rest.py

class GroupDetailSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Group 
     fields = (
      'id', 
      'num', 
      'students', 
     ) 

@permission_classes((permissions.IsAdminUser,)) 
class GroupDetailView(mixins.ListModelMixin, viewsets.GenericViewSet): 
    serializer_class = GroupDetailSerializer 

    def get_queryset(self): 
     return Group.objects.all() 

models.py

class Group(models.Model): 
    office = models.ForeignKey(Offices) 
    num = models.IntegerField() 

    @property 
    def students(self): 
     from pupils.models import Pupils 
     return Pupils.objects.filter(group=self) 

をしかし、それは型エラーを返します。

<Pupils: John Doe> is not JSON serializable

私は別のシリアライザを使う必要があると思います私のstudentsフィールドに、どのように?

+0

それがどの日時フィールドを持っているdoest?正確なトレースバックログを貼り付けることはできますか? – Roshan

+0

@roshanのコメント以外に、ネストされたシリアライザの追加方法をチェックアウトすることもできます:http://www.django-rest-framework.org/api-guide/serializers/#dealing-with-nested-objects – yuwang

+0

エラーあなたの 'Pupils'モデルがJSONシリアライズ可能でないために発生しています。回避策のために、 'json'をインポートし、' return json.dumps(Pupils.objects.filter(group = self)) 'を実行することができます。 – kapilsdv

答えて

1

エラーは、ご使用のモデルがjsonシリアライズ可能でないためです。あなたはこのような場合のために特に、http://www.django-rest-framework.org/api-guide/serializers/#dealing-with-nested-objects

や今のネストされたシリアライザに従うことを@yuwangコメントを見ることができます

あなたがするようにコードを変更することができます。

@property 
def students(self): 
    from pupils.models import Pupils 
    return list(Pupils.objects.filter(group=self).values()) 
関連する問題