Я пытаюсь создать вложенный сериализатор, но код не работает, и я не могу выяснить, где проблема.
Вот мои модели
class Company(models.Model):
name=UniqueCharField("Name",)
address=models.TextField("Address",blank=True,null=True,default='',)
city=OptionalCharField("City Name",)
state=OptionalCharField("State Name",)
country=OptionalCharField("Country Name",)
phoneno=OptionalCharField("Phone No.",)
mobileno=OptionalCharField("Mobile No.",)
emailid=OptionalCharField("Email Address",)
class Meta:
verbose_name="Company"
verbose_name_plural="Companies"
db_table="MST_Company"
class CompanyContacts(models.Model):
companyname=models.ForeignKey(Company,models.CASCADE,"contactdetails")
contactname=RequiredCharField("Contact Name",)
contactno=OptionalCharField("Contact No.")
emailid=OptionalCharField("Email ID")
class Meta:
verbose_name="Company Contact"
verbose_name_plural="Company Contacts"
db_table="MST_CompanyContacts"
и сериализаторы ,
class CompanyContactsSerializer(serializers.ModelSerializer):
def create(self,validated_data):
return CompanyContacts.objects.create(**validated_data)
class Meta:
model=CompanyContacts
exclude=('companyname',)
class CompanySerializer(serializers.ModelSerializer):
contactdetails=CompanyContactsSerializer(required=False,many=True,read_only=False)
def create(self, validated_data):
contactdetails_data=validated_data.pop('contactdetails',None)
mcompany=Company.objects.create(**validated_data)
# company.save()
if contactdetails_data:
for contactdetail in contactdetails_data:
CompanyContacts.objects.create(companyname=mcompany,**contactdetail)
return mcompany
class Meta:
model = Company
extra_fields=['contactdetails']
fields='__all__'
read_only_fields=('date_created','date_modified','user_created','user_modified')
Вот моя полезная нагрузка:
{
"id":"",
"name":"Test Company",
"address":"",
"city":"",
"state":"",
"country":"",
"phoneno":"",
"mobileno":"",
"emailid":"",
"contactdetails":[
{"contactname":"Test Name - 1","contactno":"Test Mobile - 1","emailid":"Test Email - 1"},
{"emailid":"Test Email - 2","contactno":"Test Mobile - 2","contactname":"Test Name - 2"}
]
}
Ответ сервера:
{
"name": [
"This field is required."
]
}
Одна вещь, которую я хотел бы обратить на ваше внимание, заключается в полезной нагрузке Если я опускаю объект contactdetails, он успешно сохраняется. Код не требует пояснений, даже если вам требуется что-то спросить, пожалуйста, дайте мне знать, и я предоставлю вам подробное объяснение.
Помощь будет принята с благодарностью. Заранее спасибо.