大佬教程收集整理的这篇文章主要介绍了将 request.data 映射到 onetoone 字段,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个 JsON 请求数据,如下所示,我想使用 Django 序列化程序和视图来处理它,以便使用 POST 请求在数据库中创建记录。
{
"username":"user1","first_name":"name1","email":"name1@gmail.com","phone": "123456","app_ID": "435673339303abc"
}
以下是我的 Django 数据库模型和序列化程序,其中创建了一个具有 onetoone django 用户模型的自定义用户模型:
from django.contrib.auth.models import User
from django.db import models
class Customusermodel(models.Model):
user = models.OnetoOneFIEld(User,on_delete=models.CASCADE)
phone = models.CharFIEld(max_length=20,blank=TruE)
app_ID = models.CharFIEld(max_length=20,blank=TruE)
class Userserializer(serializers.Modelserializer):
class Meta:
model = User
fIElds = ('username','first_name','email')
class CustomUserserializer(serializers.Modelserializer):
user = Userserializer(required=TruE)
class Meta:
model = Customusermodel
fIElds = ('user','phone','app_ID')
def create(self,valIDated_data):
user_data = valIDated_data.pop('user')
user = Userserializer.create(Userserializer(),valIDated_data=user_data)
customuser,created = Customusermodel.objects.update_or_create(user=user,defaults={
'phone': valIDated_data.pop('phone'),'app_ID': valIDated_data.pop('app_ID')})
return customuser
vIEws.py
class usersAPI(generics.ListAPIVIEw):
serializer_class = CustomUserserializer
def get_queryset(self):
queryset = Customusermodel.objects.all()
return queryset
def post(self,request,format=NonE):
serializer = CustomUserserializer(data=request.data)
if serializer.is_valID(raise_exception=ValueError):
serializer.create(valIDated_data=request.data)
return Response(serializer.data,status=status.http_201_CREATED)
return Response(serializer.error_messages,status=status.http_400_BAD_requEST)
但是使用这个序列化器和视图,我必须将嵌套的 Json 数据传递给我不想要的用户对象,如下所示。
{
"user":
{
"username":"user1","email":"name1@gmail.com"
},"app_ID": "435673339303abc"
}
您可以从视图中的 CustomUserModel 获取行。 CustomUserModel.objects.get(user=request.user.user_id)
,经过多次迭代,我找到了一种方法,将请求数据映射到字典中。 views.py
class usersApi(generics.ListAPIView):
serializer_class = CustomUserserializer
def get_queryset(self):
queryset = CustomUserModel.objects.all()
return queryset
def post(self,request,format=NonE):
username = request.data['username']
first_name = request.data['first_name']
email = request.data['email']
phone = request.data['phone']
app_id = request.data['app_id']
user_data = {'user': {'username': username,'first_name': first_name,'email': email},'phone': phone,'app_id': app_iD}
serializer = CustomUserserializer(data=user_data)
if serializer.is_valid(raise_exception=ValueError):
serializer.create(validated_data=user_data)
return Response(serializer.data,status=status.http_201_CREATED)
return Response(serializer.error_messages,status=status.http_400_BAD_requEST)
以上是大佬教程为你收集整理的将 request.data 映射到 onetoone 字段全部内容,希望文章能够帮你解决将 request.data 映射到 onetoone 字段所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。