Python 如何使用Django Rest框架在对象创建调用期间创建外键相关对象?
假设我有A型和B型 模型A有一系列字段,包括用户字段,该字段由创建对象A的用户填写 当创建对象A时,我想使用创建对象A的用户创建一组对象B,并可能使用对象A本身作为外键 我的模型A视图集如下所示:Python 如何使用Django Rest框架在对象创建调用期间创建外键相关对象?,python,django,django-rest-framework,Python,Django,Django Rest Framework,假设我有A型和B型 模型A有一系列字段,包括用户字段,该字段由创建对象A的用户填写 当创建对象A时,我想使用创建对象A的用户创建一组对象B,并可能使用对象A本身作为外键 我的模型A视图集如下所示: class OrganizationViewSet(DynamicModelViewSet): queryset = Organization.objects.all() serializer_class = OrganizationSerializer permission_
class OrganizationViewSet(DynamicModelViewSet):
queryset = Organization.objects.all()
serializer_class = OrganizationSerializer
permission_classes = (IsAdminOfPermission,)
因此,当创建一个组织时,我想使用创建该组织的用户创建一组对象B,并可能使用该组织对象本身
我该怎么做?这可能不是最优雅的方法。。。但我会这样做:
class DemoHandler(APIView):
authentication_classes = (CsrfExemptSessionAuthentication,)
permission_classes = (IsAuthenticated,)
def post(self, request, format=None):
m = ModelA(..., user=request.user, ...)
m.save()
m2 = ModelB( ... )
...
换句话说,我只需要使用APIView vice手动定义ModelViewset。希望有人有更好的方法。在序列化器创建方法中实现逻辑
class OrganizationSerializer(serializers.ModelSerializer):
# ...
# ...
# ...
def create(self, validated_data):
user = validated_data.get('user')
organization = Organization.objects.create(**validated_data)
# create model B with `user` and `organization`
# like ModelB.objects.create(user=user, organization=organization, ...)
return organization
要将用户从视图传递到序列化程序,必须通过序列化程序的save方法发送
比如说
class OrganizationList(APIView):
queryset = Organization.objects.all()
serializer_class = OrganizationSerializer
permission_classes = (IsAdminOfPermission,)
def post(self, request, format=None):
serializer = OrganizationSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
serializer.save(user=request.user)
return Response(serializer.data, status=status.HTTP_201_CREATED)
另外,使用
bulk\u create
一次保存所有ModelB实例。这是您必须采用的方法,因为要添加某些内容作为foreignKey关系,它必须已经保存到DB中。