python - 如何从序列化程序中获取用户?
问题描述
我试图perform_update
在我的views
, 从序列化程序中获取用户并将其分配给updated_by
我的Category
模型中。
class Category(models.Model):
name = models.CharField(max_length=80)
created_at = models.DateTimeField(auto_now_add = True, null = True)
created_by = CurrentUserField()
updated_at = models.DateTimeField(auto_now = True, null = True)
updated_by = models.ForeignKey(User, default = None, blank=True, null=True, on_delete=models.DO_NOTHING, related_name="updated_by")
deleted_at = models.DateTimeField(null = True)
deleted_by = models.ForeignKey(User, default = None, blank=True, null=True, on_delete=models.DO_NOTHING, related_name='deleted_by')
class Meta:
verbose_name_plural = "Categories"
def __str__(self):
return self.name
def soft_delete(self, deleter):
self.deleted_by = deleter
self.deleted_at = timezone.now()
self.save()
串行器
class CategorySerializer(serializers.ModelSerializer):
class Meta:
model = Category
fields = "__all__"
意见:
class CategoryView(viewsets.ModelViewSet):
serializer_class = CategorySerializer
queryset = Category.objects.all()
def get_permissions(self):
if self.request.method == "GET":
self.permission_classes = (AllowAny, )
else:
self.permission_classes = (IsAdminUser, )
return super(CategoryView, self).get_permissions()
def perform_update(self, serializer):
instance = self.get_object()
instance.updated_by = username
serializer.save()
def destroy(self, request, *args, **kwargs):
instance = self.get_object()
deleter = self.request.user
self.perform_destroy(instance, deleter)
return Response(status=status.HTTP_204_NO_CONTENT)
def perform_destroy(self, instance, deleter):
instance.soft_delete(deleter)
解决方案
用户可根据请求获得,而不是序列化程序。您已经在使用self.request.user
indestroy()
并且可以在 in 中做同样的事情perform_update()
def perform_update(self, serializer):
serializer.save(updated_by=self.request.user)
推荐阅读
- asp.net-core - 在 ASP.NET Core 中动态添加 Vus.js 组件
- java - 选择排序不排序Java
- vba - 隐藏要通过邮件发送的列 excel vba
- cordova - Ionic - 内联日期时间选择器
- javascript - ECMAScript 对象扩展/休息 - 一次分配给多个属性
- ios - 强制 iOS 应用使用私有 API 在前台打开
- javascript - 仅当在循环内调用类方法时,Javascript 执行中断并显示 TypeError 消息“无法读取未定义的属性 'refcount'”
- python - Kivy : Apply function variables to Button Text
- tensorflow - 用于对象检测的 Tensorboard eval.py IOU
- python - API Gateway 中的 AWS Lambda 集成响应 - {"message": "Internal server error"}