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



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

这里我有一个简单的创建,保存当前用户userid到recorded_by,我怎么能在我的ModelSerializer

编辑:对于我的更新方法,我使用实例。解决等等……如果有两个返回instance,我怎么能使这个工作?超级()共创(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)

Edit2:

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

编辑:我让它工作通过使用这个

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

直接覆盖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)

最新更新