Python Django TypeError:“;“用户”;对象不可编辑在序列化过程中弹出
我的django项目有问题。我使用的是django rest框架,在序列化过程中我好像做错了什么。问题是: 我有一个APIview,它应该向用户返回一个JSON,该用户应该通过令牌进行身份验证。此json应包含当前用户类的列表。以下是代码:Python Django TypeError:“;“用户”;对象不可编辑在序列化过程中弹出,python,django,api,serialization,django-rest-framework,Python,Django,Api,Serialization,Django Rest Framework,我的django项目有问题。我使用的是django rest框架,在序列化过程中我好像做错了什么。问题是: 我有一个APIview,它应该向用户返回一个JSON,该用户应该通过令牌进行身份验证。此json应包含当前用户类的列表。以下是代码: class StudentTodayScheduleView(views.APIView): """ API that returns JSON with schedule for user who is requesting """
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)
这是副喷雾器:
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'
)
以下是console显示的内容:
ProfileModel是添加到默认django用户模型的附加模型。ProfileModel具有用户的OneToOneField
如果我尝试在shell中序列化Para对象,则可以。但是,如果我试图从序列化的para对象中取出数据,我会得到与您在屏幕截图上看到的相同的错误。
另外,如果我在序列化程序类中注释掉para_professor字段,我不会得到错误
请解释我做错了什么
谢谢你抽出时间
塔拉斯
更新:
参数模型、用户和配置文件序列化程序:
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'
)
您的ProfileSerializer使用
many=True
定义user
,但每个配置文件只有一个用户。您的ProfileSerializer使用many=True
定义user
,但每个配置文件只有一个用户。您可能应该显示您的模型定义,以及UserSerializer的代码。您可能应该显示您的模型定义,以及UserSerializer的代码。