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:
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'
)
Sie sollten wahrscheinlich Ihre Modelldefinition und auch den Code für UserSerializer anzeigen. –