2016-06-30 24 views
0

私のdjangoプロジェクトに問題があります。私はdjango restフレームワークを使っていて、シリアル化中に何か間違っているようです。だからここに問題があります:Django TypeError:シリアル化中に "User"オブジェクトが反復可能ではありません

トークンで認証する必要があるユーザーにJSONを返すAPIビューがあります。このJSONはtoday.hereのためのユーザークラスのリストが含まれている必要がありコードです:ここでは

class StudentTodayScheduleView(views.APIView): 
    """ 
    API that returns JSON with schedule for user who is requesting 
    """ 
    authentication_classes = (TokenAuthentication,) 
    permission_classes = (IsAuthenticated,) 

    def get(self, request, format=None): 
     user = request.user 
     usergroup = ProfileModel.objects.filter(user=user)[0].student_group 
     current_weekday = datetime.date.today().weekday() # integer 0-monday .. 6-Sunday 
     today = WorkingDay.objects.get(dayoftheweeknumber=current_weekday) 

     todaysdate = datetime.date.today() 
     weektype = get_weektype(todaysdate) 

     classes_for_today = Para.objects.filter(para_group=usergroup, para_day=today, week_type=weektype) 
     result = dict() 
     for para in classes_for_today: 
       result.update(ParaSerializer(para).data) 

     return Response(result, status=status.HTTP_200_OK) 

はParaSerializerです:ここ

class ParaSerializer(serializers.ModelSerializer): 
    para_subject = DisciplineSerializer() 
    para_room = RoomSerializer() 
    para_professor = ProfileSerializer(read_only=True) 
    para_number = ParaTimeSerializer() 
    para_day = WorkingDaySerializer() 
    # para_group = StudentGroupSerializer() 

    class Meta: 
     model = Para 
     fields = (
      'para_subject', 
      'para_room', 
      'para_professor', 
      'para_number', 
      'para_day', 
      'para_group', 
      'week_type' 
    ) 

は、コンソールが表示さです: enter image description here

ProfileModelそのデフォルトのdjangoユーザモデルに追加される追加モデルです。 ProfileModelにはUserを持つOneToOneFieldがあります。

もし私がシェルでパラオブジェクトをシリアル化しようとすると - それは大丈夫です。しかし、シリアル化されたパラオブジェクトからデータを取得しようとすると、スクリーンショットで表示されるのと同じエラーが発生します。 また、シリアライザクラスのpara_professorフィールドをコメントアウトすると、エラーは発生しません。

私が間違っていることを説明してください。

はお時間をいただき、ありがとうございます タラス

UPDATE:

パラモデル、ユーザーとプロファイルシリアライザ:

class Para(models.Model): 

    class Meta(object): 
     verbose_name = u"Class" 
     verbose_name_plural = u"Classes" 

    para_subject = models.ForeignKey(
     'Disciplines', 
     blank=True, 
     null=True, 
     verbose_name=u"Discipline" 
    ) 
    para_room = models.ForeignKey(
     'Rooms', 
     blank=True, 
     null=True, 
     verbose_name=u"Room" 
    ) 
    para_professor = models.ForeignKey(
     'students.ProfileModel', 
     blank=True, 
     null=True, 
     verbose_name=u"Professor" 
    ) 
    para_number = models.ForeignKey(
     'ParaTime', 
     blank=True, 
     null=True, 
     verbose_name=u"Class Starts/Ends" 
    ) 
    para_day = models.ForeignKey(
     WorkingDay, 
     blank=True, 
     null=True, 
     verbose_name=u"Working day") 

    para_group = models.ForeignKey(
     'StudentGroupModel', 
     blank=True, 
     null=True, 
     verbose_name=u"Student Group" 
    ) 
    week_type = models.BooleanField(
     default=True, 
     verbose_name=u"Is week even" 
    ) 

    def __unicode__(self): 
     return u"%s %s" % (self.para_subject, self.para_room) 


class UserSerializer(serializers.ModelSerializer): 
    groups = GroupSerializer(read_only=True, many=True) 
    class Meta: 
     model = User 
     fields = (
      'username', 
      'email', 
      'groups', 
      'first_name', 
      'last_name' 
     ) 


class ProfileSerializer(serializers.ModelSerializer): 
    user = UserSerializer(read_only=True, many=True) 

    class Meta: 
     model = ProfileModel 
     fields = (
      'user', 
      'is_student', 
      'student_group', 
      'middle_name', 
      'contact_phone', 
      'photo', 
      'started_date' 
     ) 
+0

モデル定義と、UserSerializerのコードを表示する必要があります。 –

答えて

3

あなたProfileSerializerがmany=Trueuserを定義していますが、ごとに1人のだけのユーザーが存在しますプロフィール。

+0

ありがとうございます!出来た:))) –

関連する問題