大家好我想在django rest框架中使用嵌套序列化器在via API中创建一个用户,我遇到了一些问题:
这是我的代码:
class AffiliateRegisterSerializer(serializers.ModelSerializer):
class Meta:
model = Affiliate
fields = ('phone','address','state','city','ZIP','country','company','web_name','web_url','web_desc','payee_name','monthly_visits',)
和我的第二个序列化器:
class UserSerializer(serializers.ModelSerializer):
'''
Registering a new user with Affiliate Profile
'''
affiliate = AffiliateRegisterSerializer(required=False)
class Meta:
model = User
fields = ('username','first_name','last_name','email','password','affiliate',)
write_only_fields = ('password',)
read_only_fields = ('id','affiliate',)
def create(self, validated_data):
affiliate_data = validated_data.pop('affiliate')
user = User.objects.create_user(**validated_data)
Affiliate.objects.create(user=user, **affiliate_data)
return user
这是我的观点:
class AffiliateSignUp(generics.CreateAPIView):
'''
API endpoint for Affiliate Users registration
'''
queryset = User.objects.all()
serializer_class = UserSerializer
permission_classes = [permissions.AllowAny]
@method_decorator(ensure_csrf_cookie)
@method_decorator(csrf_protect)
def create(self, request):
serializer = UserSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return JsonResponse(serializer.data, status=201)
return JsonResponse(serializer.errors, status=400)
如何通过AngularJS发送POST请求以立即创建用户和个人资料?
我试图通过AngularJs发布一个嵌套对象,但它说:
会员:["此字段为必填项。"]
如果我通过url直接从后端发送:/ api / affilaite它会非常好地注册用户,但是我唯一能解决的问题是,
如何在javascript中使用嵌套对象发送POST请求。
这是我的javascript代码:
data:$httpParamSerializerJQLike({
'first_name':$scope.userData['first_name'],
'last_name':$scope.userData['last_name'],
'username':$scope.userData['username'],
'password':$scope.userData['password'],
'email':$scope.userData['email'],
affiliate:{
'phone':$scope.userData['phone'],
'address':$scope.userData['address'],
'state':$scope.userData['state'],
'city':$scope.userData['city'],
'ZIP':$scope.userData['ZIP'],
'country':$scope.userData['country'],
'company':$scope.userData['company'],
'web_url':$scope.userData['webUrl'],
'web_name':$scope.userData['webName'],
'web_desc':$scope.userData['webDesc'],
//'web_category':$scope.userData ['webCategory'],
'payee_name':$scope.userData['payeeName'],
'monthly_visits':$scope.userData['monthly_visits']
}
}
请帮助我们:D我正在努力:P
答案 0 :(得分:1)
序列化程序affiliate
中只有Meta
只读:read_only_fields = ('id','affiliate',)
。
READ_ONLY
只读字段包含在API输出中,但不应包含在API输出中 在创建或更新操作期间包含在输入中。任何 ' READ_ONLY'错误地包含在序列化程序中的字段 输入将被忽略。
将此项设置为True可确保在序列化时使用该字段 表示,但在创建或更新实例时不使用 在反序列化期间。
默认为False
答案 1 :(得分:0)
<强>解决强>
问题是我发送了一个QueryDict应用程序/ x-www-form-urlencoded
所以从前端我改变了
method:'POST',
url:'/api/URL/',
headers: {'Content-Type': 'application/json'},
dataType: 'json',
我发送一个嵌套对象。
因此,这会立即创建一个具有用户个人资料的用户。
谢谢大家的支持