如何形成 JSON 对象,以便它可以被嵌套模型序列化程序反序列化
How to form JSON object so that it could be deserialized by nested model serializer
我有两个模型 CompanyDetails
和 User
,为此我创建了两个 ModelSerializer
作为 CompanyDetailsSerializer
和 RegisterUserSerializer
。
CompanyDetailsSerializer
class CompanyDetailsSerializer(serializers.ModelSerializer):
class Meta:
model = CompanyDetails
fields = ['id', 'company_name', 'is_active']
extra_kwargs = {
'company_name' : {
'required' : True,
'allow_null' : False,
'allow_blank' : False
}
}
RegisterUserSerializer
class RegisterUserSerializer(serializers.ModelSerializer):
'''
This serializer is for Register User view.
'''
company = CompanyDetailsSerializer()
class Meta:
model = User
fields = ['id', 'first_name', 'last_name', 'email', 'mobile_number', 'company', 'password']
extra_kwargs = {
'first_name' : {
'required' : True,
'allow_null' : False,
'allow_blank' : False
},
'last_name' : {
'required' : True,
'allow_null' : False,
'allow_blank' : False
},
'email' : {
'required' : True,
'allow_null' : False,
'allow_blank' : False
},
'mobile_number' : {
'required' : True,
},
'password' : {
'required' : True,
'allow_blank' : False,
'allow_null' : False,
'write_only': True
}
}
request.data 有以下 JSON 由 RegisterUserSerializer
-
进一步序列化
{
"first_name": "Jeet",
"last_name": "Patel",
"mobile_number": 9765136777,
"email": "jpatel99967@gmail.com",
"password": "123456",
"comapany": {
"company_name": "Yantra Inc"
}
}
但是 RegisterUserSerializer
会产生下面所述的错误。
{
"company": [
"This field is required."
]
}
我应该如何将 JSON 数据发送到序列化程序?
首先,您的数据中有错字:comapny
而不是 company
。
假设 User
有一个到 Company
的外键,那么你的用户 JSON 数据中的 company
应该是一个有效的 Company
主键.
我有两个模型 CompanyDetails
和 User
,为此我创建了两个 ModelSerializer
作为 CompanyDetailsSerializer
和 RegisterUserSerializer
。
CompanyDetailsSerializer
class CompanyDetailsSerializer(serializers.ModelSerializer):
class Meta:
model = CompanyDetails
fields = ['id', 'company_name', 'is_active']
extra_kwargs = {
'company_name' : {
'required' : True,
'allow_null' : False,
'allow_blank' : False
} }
RegisterUserSerializer
class RegisterUserSerializer(serializers.ModelSerializer):
'''
This serializer is for Register User view.
'''
company = CompanyDetailsSerializer()
class Meta:
model = User
fields = ['id', 'first_name', 'last_name', 'email', 'mobile_number', 'company', 'password']
extra_kwargs = {
'first_name' : {
'required' : True,
'allow_null' : False,
'allow_blank' : False
},
'last_name' : {
'required' : True,
'allow_null' : False,
'allow_blank' : False
},
'email' : {
'required' : True,
'allow_null' : False,
'allow_blank' : False
},
'mobile_number' : {
'required' : True,
},
'password' : {
'required' : True,
'allow_blank' : False,
'allow_null' : False,
'write_only': True
}
}
request.data 有以下 JSON 由 RegisterUserSerializer
-
{
"first_name": "Jeet",
"last_name": "Patel",
"mobile_number": 9765136777,
"email": "jpatel99967@gmail.com",
"password": "123456",
"comapany": {
"company_name": "Yantra Inc"
}
}
但是 RegisterUserSerializer
会产生下面所述的错误。
{
"company": [
"This field is required."
]
}
我应该如何将 JSON 数据发送到序列化程序?
首先,您的数据中有错字:comapny
而不是 company
。
假设 User
有一个到 Company
的外键,那么你的用户 JSON 数据中的 company
应该是一个有效的 Company
主键.