2016-06-30 7 views
0

Ich habe ein Problem mit meinem Django-Projekt. Ich benutze Django Rest Framework und scheint wie ich etwas falsch während der Serialisierung tun. Also hier ist das Problem:Django TypeError: "User" -Objekt ist nicht iterierbar während der Serialisierung erscheint

Ich habe eine APIview, die ein JSON an den Benutzer zurückgeben sollte, die auth von Token sein sollte. Diese json sollte die Liste der Benutzer Klassen enthalten für today.here der Code:

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) 

Hier ist die 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' 
    ) 

hier ist das, was Konsole zeigt: enter image description here

ProfileModel seine das zusätzliche Modell, das dem Standard-Django-Benutzermodell hinzugefügt wird. ProfileModel hat OneToOneField mit Benutzer.

Wenn ich versuche, Para-Objekt in der Shell zu serialisieren - es ist in Ordnung. Aber wenn ich versuche, Daten aus dem serialisierten Para-Objekt herauszuholen, würde ich den gleichen Fehler bekommen, den Sie auf dem Screenshot sehen. Auch wenn ich para_professor Feld in der Serialisator Klasse auskommentieren - ich würde keinen Fehler bekommen.

Bitte erklären Sie, was ich falsch mache.

Vielen Dank für Ihre Zeit Taras

UPDATE:

Para-Modell, Benutzer und Profil Serializer:

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

Sie sollten wahrscheinlich Ihre Modelldefinition und auch den Code für UserSerializer anzeigen. –

Antwort

3

Ihre ProfileSerializer definiert user mit many=True, aber es ist nur ein Benutzer pro Profil.

+0

Vielen Dank! es funktionierte:))) –

Verwandte Themen