我们应该在哪里编写我们的 CURD 操作在模型视图集或视图集或 django rest 框架中的序列化程序中

印度网络恶魔

如果我们仔细观察,我们有两个 CURD 操作都可以在 viewset 中进行

根据文档中的示例

class UserViewSet(viewsets.ViewSet):
    """
    Example empty viewset demonstrating the standard
    actions that will be handled by a router class.

    If you're using format suffixes, make sure to also include
    the `format=None` keyword argument for each action.
    """

    def list(self, request):
        pass

    def create(self, request):
        pass

    def retrieve(self, request, pk=None):
        pass

    def update(self, request, pk=None):
        pass

    def partial_update(self, request, pk=None):
        pass

    def destroy(self, request, pk=None):
        pass

这是序列化程序示例

class CommentSerializer(serializers.Serializer):
    email = serializers.EmailField()
    content = serializers.CharField(max_length=200)
    created = serializers.DateTimeField()

    def create(self, validated_data):
        return Comment(**validated_data)

    def update(self, instance, validated_data):
        instance.email = validated_data.get('email', instance.email)
        instance.content = validated_data.get('content', instance.content)
        instance.created = validated_data.get('created', instance.created)
        return instance

假设我们可以得到经过验证的数据,跳过那个,问题是我应该在哪里执行 CRUD 操作,使用每个的权衡是什么。什么是最佳实践,为什么采用这种方法的原因,这对很多人都有很好的帮助。

萨拉斯·钱德兰 K

这取决于我们的要求。

CRUD 操作在视图集中处理。这是一句话的回答。

在您提供的代码中:

类 CommentSerializer(serializers.Serializer):

由于这是一个普通的序列化程序,因此您必须在此处编写 create 和 update 方法。您可以使用 ModelSerializer,它可以使您免于编写创建和更新的定义。像这样。

Class CommentSerializer(serializer.ModelSerializer):
      class Meta:
          fields = '__all__'
          model = Comment 

然后您可以使用 ModelViewSet 编写视图集,它为您提供所有 CRUD 操作的默认实现。

Class CommentViewSet(viewset.ModelViewSet):
      serializer_class = CommentSerializer
      queryset         = Comment.objects.all()

现在 CommentViewSet 允许您执行所有 CRUD 操作。这就是我们使用 ModelViewSet 的原因。

如果您需要在创建或更新期间执行额外操作,您可以简单地覆盖序列化程序中create() 和 update()方法。
这是我们在序列化程序中编写 CRUD 的时候——做额外的动作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章