【问题标题】:Django RF ModelSerializer get current user's useridDjango RF ModelSerializer 获取当前用户的用户标识
【发布时间】:2022-11-15 14:24:11
【问题描述】:

我想将我所有的创建、更新方法从我的视图移动到 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)

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

编辑:对于我的更新方法,我使用的是 instance.resolve 等...如果有两个都返回,我怎么能使它工作实例super().create(验证数据)

    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)

编辑2:

    def update(self, instance, validated_data):
    instance.resolve_by = validated_data.get(self.context["request"].user.userid, instance.resolve_by)
    instance.save()
    return instance

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    只需覆盖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)
    

    【讨论】:

    • 我编辑问题你能帮我更新方法吗?在我使用实例之前,但现在有了validated_data参数,我如何组合或者更确切地说如何使这项工作
    • 这里没什么特别的 - 只需通过将数据添加到 validated_data dict 来注入登录用户 - 就像 validated_data["recorded_by"] = self.context["request"].user
    • 我再次编辑它你能看吗我尝试同时使用两者并且没有错误但它没有更新
    猜你喜欢
    • 1970-01-01
    • 2015-01-24
    • 2014-05-02
    • 2018-10-03
    • 2021-11-20
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    相关资源
    最近更新 更多