django-rest-framework - 我如何决定在通用视图类或序列化程序类上覆盖 create() 方法
问题描述
我是 Django 休息框架的新手,根据我所学到的。create()
通用视图中的方法用于生成响应,而create()
在序列化器类中用于将模型实例保存在数据库中。这是对的吗?
问题是我有一个Tag
模型,该name
字段必须是唯一的。所以我决定覆盖通用视图中的方法create()
来检查模型是否已经存在。这是否有意义或者我应该覆盖序列化程序类上的方法name
Tag
create()
下面是我的代码
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
解决方案
是的,您可以覆盖序列化程序类中的创建方法。
class MySerializer(ModelSerializer):
class Meta:
model = MyModel
fileds = (...)
def create(self, validated_data):
# You can customize this method
return validated_data
推荐阅读
- angular - 从 Angular 6 升级到 Angular 8 时出错
- ldap - 如何使用该用户的 UPN 更新用户的属性,我正在使用该特定用户的“dn”来更新属性密码
- javascript - 如何将 dataurl 转换回图像并在画布上显示
- angular - 是否有任何方法可以自动安装角度依赖项?
- asp.net-mvc - URL 重写问题 - IIS 和 MVC
- python - 如何绘制非数值数据的日期时间和 value_counts()?
- kotlin - 如何在 kotlin 中调用接口?
- mysql - mysql for Postgresql中PATINDEX的熟悉功能
- python - 从文本文件的每一行中提取字符串并将输出保存在 csv 行中
- angular - 如何修复“找不到模块'@angular-devkit/schematics'”