首页 > 解决方案 > 我如何决定在通用视图类或序列化程序类上覆盖 create() 方法

问题描述

我是 Django 休息框架的新手,根据我所学到的。create()通用视图中的方法用于生成响应,而create()在序列化器类中用于将模型实例保存在数据库中。这是对的吗?

问题是我有一个Tag模型,该name字段必须是唯一的。所以我决定覆盖通用视图中的方法create()来检查模型是否已经存在。这是否有意义或者我应该覆盖序列化程序类上的方法nameTagcreate()

下面是我的代码

def create(self, request, *args, **kwargs): 
    serializer = self.get_serializer(data=request.data)
    serializer.is_valid(raise_exception=True)
    if self.check_tag(request.data) == False: 
        self.perform_create(serializer)
        return Response(
            data=serializer.data,
            status=status.HTTP_201_CREATED
        )
    return Response(
        data={'name': 'tag with this name already exists.'},
        status=status.HTTP_400_BAD_REQUEST
    )

P/s:由于其他一些原因,我无法为模型中unique的字段添加属性name

标签: django-rest-framework

解决方案


是的,您可以覆盖序列化程序类中的创建方法。

class MySerializer(ModelSerializer):
    class Meta:
        model = MyModel
        fileds = (...)

    def create(self, validated_data):
        # You can customize this method
        return validated_data

推荐阅读