私の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'
)
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'
)
モデル定義と、UserSerializerのコードを表示する必要があります。 –