爲了更精確的序列化,有時候不可避免的需要在序列化時進行ORM
操作,同時有時需要校驗該user
是否有權限等,因此,可以通過這種方式
1. view
傳到TestSerializer
中
user = request.user
user_serializer = TestSerializer(instance=userArray, many=True, context={'user': user})
2. 在TestSerializer
中獲取
class TestSerializer(serializers.ModelSerializer):
shcool = serializers.SerializerMethodField()
def get_accessmentjournal(self, obj):
user = self.context.get("user")
if user:
try:
school = obj.school.get(user_id=user.id )
return {
'id': school.class.id,
'name': school.class.name,
'rate': school.class.rate,
'evaluation': school.class.evaluation}
except:
return None
return None
class Meta:
model = LessonImpl
fields = ('pk', 'lesson', 'add_time', 'start_time', 'status', 'sequence', 'chapterjournal_set', 'accessmentjournal')
注意
- 儘量少寫else,會影響性能
- 使用
get()
時,儘量賦值,而不是在判斷條件裏使用
# 推薦
user = self.context.get("user")
if user:
# 不推薦
if self.context.get("user"):