rest_framework.serilizer中獲取user

爲了更精確的序列化,有時候不可避免的需要在序列化時進行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"):
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章