自定义 CreateModelMixin - 在我的模型中定义的对象创建
Customized CreateModelMixin - Object creation defined in my Model
我剩下的api视图只定义了两个方法:
class RequestSerializerViewSet(mixins.CreateModelMixin,
mixins.ListModelMixin,
viewsets.GenericViewSet):
我有一些覆盖列表的经验,但是我没有覆盖创建的经验,因为它似乎要复杂得多。
我想达到的效果如下。我的 Request 模型有一个创建 Requests 实例的特殊方法 - start_request。这个方法不仅创建了 Request 的实例,还创建了一些额外的外部对象并将它们分配给新创建的 Request.
所以我的目标是修改 rest api POST(创建、perform_create 或序列化器 - 我不知道 atm . 这是正确的方法)方法,它不会自己创建 Request,而是使用 start_request 方法模型的。
最好的 django 方法是什么?
您可以在序列化程序中重新定义 create
方法。假设您有 RequestSerializer
:
class RequestSerializer(serializers.ModelSerializer):
class Meta:
model = Request
fields = "__all__"
def create(self, validated_data):
request = Request.start_request(**validated_data) # pass all parameters from serializer
return request
我剩下的api视图只定义了两个方法:
class RequestSerializerViewSet(mixins.CreateModelMixin,
mixins.ListModelMixin,
viewsets.GenericViewSet):
我有一些覆盖列表的经验,但是我没有覆盖创建的经验,因为它似乎要复杂得多。
我想达到的效果如下。我的 Request 模型有一个创建 Requests 实例的特殊方法 - start_request。这个方法不仅创建了 Request 的实例,还创建了一些额外的外部对象并将它们分配给新创建的 Request.
所以我的目标是修改 rest api POST(创建、perform_create 或序列化器 - 我不知道 atm . 这是正确的方法)方法,它不会自己创建 Request,而是使用 start_request 方法模型的。 最好的 django 方法是什么?
您可以在序列化程序中重新定义 create
方法。假设您有 RequestSerializer
:
class RequestSerializer(serializers.ModelSerializer):
class Meta:
model = Request
fields = "__all__"
def create(self, validated_data):
request = Request.start_request(**validated_data) # pass all parameters from serializer
return request