【发布时间】:2022-01-14 20:53:58
【问题描述】:
我正在使用 DRF 在单页应用程序中创建 API。 我有一个客户用户类,我只添加了一个 is_manager 标志和一个 managerEntity 模型,其中具有 is_manager 标志为 True 的用户可以创建 managerEntity 成为它们的所有者。 问题是我似乎无法弄清楚如何在创建方法之前验证来自序列化程序的数据以检查 is_manager 是否已设置。如果设置,则应该创建 managerEntity,如果没有,则引发异常。
class DeepmetricsUser(AbstractUser):
is_manager = models.BooleanField(default=False)
class managerEntity(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=200)
owner = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
team = models.ManyToManyField(get_user_model(), blank=True)
views.py
class managersEntityViewSet(viewsets.ModelViewSet):
queryset = managerEntity.objects.all()
serializer_class = managerEntityModelSerializer
permission_classes = [permissions.IsAuthenticated]
def get_queryset(self):
return self.queryset.filter(Q(owner = self.request.user) | Q(team=self.request.user.id))
def create(self, request, *args, **kwargs):
serializer = managerEntitySerializer(data=request.data, context={"request": self.request})
serializer.is_valid(raise_exception=True)
res = serializer.save()
data = managerEntityModelSerializer(res).data
return Response(data, status=status.HTTP_201_CREATED)
serializer.py
class managerEntitySerializer(serializers.Serializer):
name = serializers.CharField(max_length=255)
owner = serializers.HiddenField(default=serializers.CurrentUserDefault())
def create(self, data):
res = managerEntity.objects.create(**data)
return res
【问题讨论】:
标签: django django-rest-framework