我正在尝试建立一个用户可以订阅公司的系统。为此,我必须实现以下流程:
为此,我必须实现一个API终结点,该终结点由用户接收代码(此时用户已通过身份验证)。
这很可耻,但我迷路了:我正在考虑实现这样的视图。
class RegisterUserToCustomer(APIView):
permission_classes = (permissions.IsAuthenticated,)
def post(self, request, format=None):
serializer = CustomerSerializer(data=request.data)
if serializer.is_valid():
serializer.save(user=self.request.user)
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.data, status=status.HTTP_400_BAD_REQUEST)
显然,我必须:
但是我应该在哪里实现这个逻辑。以我有限的经验,我看到了三种可能性:
serializer.save()
并编写一个自定义create()
方法(但我不想创建任何东西,因此这似乎是不明智的做法validated_data
访问代码(这似乎是一个问题?)save()
方法吗?自定义的save()
方法包含很多验证逻辑,因为自定义save()
方法有什么示例。很显然,我不希望你们为我编写整个代码,但是也许有人对如何以及在何处实现此代码有一定的了解?
答案 0 :(得分:0)
执行此操作的步骤:
save()
方法存储外键。此方案仅适用于订阅一个组织,如果您能够订阅多个组织,则将该字段设置为 ManytoMany 字段。
请参阅代码示例,
Models.py
class Customer(models.Model):
# customer related field
name = models.CharField(max_length=20)
organization = models.ForeignKey(Organization, on_delete=models.CASCADE)
Serializer.py
class CustomerSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('name', 'organization', )
Views.py
class CustomerViewSet(viewsets.ModelViewSet):
serializer_class = CustomerSerializer
queryset = Customer.objects.all()
请求数据(POST Json)
{
"name": "test",
"organization": "id-of company"
}