Django RF ModelSerializer 获取当前用户的用户ID

Aar*_*ael 1 django django-rest-framework

我想将我的所有创建、更新方法从我的视图移动到serializer.py,我读过让你的视图保持精简,而序列化器保持丰富。

class APIClerkView(generics.ListCreateAPIView):
permission_classes = [IsAuthenticated]
serializer_class = ClearanceItemSerialize

  def perform_create(self, serializer):
     serializer.save(recorded_by=self.request.user.userid)
Run Code Online (Sandbox Code Playgroud)

这里我有一个简单的创建,将当前用户的 userid 保存到 Recorded_by,我怎样才能在我的 ModelSerializer 中做到这一点

编辑:对于我的更新方法,我使用的是instance.resolve等...如果有两个同时返回instancesuper().create(validated_data),我怎样才能完成这项工作

    def update(self, instance, validated_data):
    instance.resolve = 'True'
    instance.resolve_date = timezone.now()
    validated_data.resolve_by = self.context["request"].user.userid 
    

    TransactionLog.objects.create(cl_itemid=ClearanceItem.objects.get(cl_itemid=instance.cl_itemid),
      trans_desc="Resolve Clearance Item",
      trans_recorded=timezone.now())
    return instance
    return super().create(validated_data)
Run Code Online (Sandbox Code Playgroud)

编辑2:

    def update(self, instance, validated_data):
    instance.resolve = 'True'
    instance.resolve_date = timezone.now()
    instance.resolve_by = validated_data.get(self.context["request"].user.userid, instance.resolve_by)
    instance.save()
    return instance
Run Code Online (Sandbox Code Playgroud)

编辑:我通过使用它来工作

    def update(self, instance, validated_data):
    instance.resolve = 'True'
    instance.resolve_date = timezone.now()
    instance.resolve_by = self.context["request"].user.userid

    TransactionLog.objects.create(cl_itemid=ClearanceItem.objects.get(cl_itemid=instance.cl_itemid),
      trans_desc="Resolve Clearance Item",
      trans_recorded=timezone.now())
    instance.save()
    return instance
Run Code Online (Sandbox Code Playgroud)

JPG*_*JPG 5

只需重写create(...)序列化器的方法

class ClearanceItemSerialize(serializers.ModelSerializer):
    # other fields and meta
    def create(self, validated_data):
        # attach the user to the validated data
        validated_data["recorded_by"] = self.context["request"].user
        return super().create(validated_data)
Run Code Online (Sandbox Code Playgroud)