【发布时间】:2021-05-12 05:11:06
【问题描述】:
我有一个如下 JSON 请求数据,我想使用 Django 序列化程序和视图来处理它,以便使用 POST 请求在数据库中创建记录。
{
"username":"user1",
"first_name":"name1",
"email":"name1@gmail.com",
"phone": "123456",
"app_id": "435673339303abc"
}
以下是我的 Django 数据库模型和序列化程序,其中创建了一个自定义用户模型,该模型具有 onetoone django 用户模型:
models.py
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)
serializers.py
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",
"first_name":"name1",
"email":"name1@gmail.com"
},
"phone": "123456",
"app_id": "435673339303abc"
}
【问题讨论】:
标签: python-3.x django django-models django-rest-framework one-to-one