drf 序列化 外键与多对多
models
class Depart(models.Model):
name = models.CharField(verbose_name='部门名', max_length=32)
class Tag(models.Model):
name = models.CharField(verbose_name='标签名', max_length=32)
class UserInfo(models.Model):
username = models.CharField(verbose_name='用户名', max_length=32)
password = models.CharField(verbose_name='密码', max_length=32)
token = models.CharField(verbose_name='token', max_length=64, null=True, blank=True)
role = models.SmallIntegerField(verbose_name='角色', choices=((1, '经理'), (2, '总监'), (3, '普通'),), default=3)
depart = models.ForeignKey(verbose_name='部门', to='Depart', on_delete=models.CASCADE, default=1)
c_time = models.DateTimeField(verbose_name='创建时间', auto_now=True)
tag = models.ManyToManyField(verbose_name='标签', to='Tag')
views
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = models.UserInfo
fields = '__all__'
def validate_depart(self, value):
"""
depart是外健,value是对象
"""
if value.id < 2:
print(value.id)
return value
raise exceptions.ValidationError('depart不能大于2')
def validate_tag(self, value):
"""
tag是多对多,value是list对象
"""
return value
class UserView(OrPermissionAPIView):
def post(self, request, *args, **kwargs):
"""
{
"username": "szw2",
"password": "szw2",
"depart":1,如果要穿depart_id需要自己在序列化器中定义使用
"tag":[1,2]
}
针对外健,直接传入id,多对多传入list
"""
json_data = request.data
ser = UserSerializer(data=json_data)
if ser.is_valid():
# 提交数据库时,自动关联外健,创建多对多关系
ser.save()
return Response("ok")
else:
return Response(ser.errors)
本文作者:Sherwin
本文链接:https://www.cnblogs.com/sherwin1995/p/16757424.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步