Почему вложенный сериализатор в django не работает в моем коде - PullRequest
0 голосов
/ 26 января 2020

Я пытаюсь создать вложенный сериализатор, но код не работает, и я не могу выяснить, где проблема.

Вот мои модели

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, он успешно сохраняется. Код не требует пояснений, даже если вам требуется что-то спросить, пожалуйста, дайте мне знать, и я предоставлю вам подробное объяснение.

Помощь будет принята с благодарностью. Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 28 января 2020

Я решил эту проблему сам. Это не имело ничего общего с серверной частью. На самом деле, при отправке запроса POST команда не устанавливала заголовки: {"Content-Type": "application / json", "Accept": "application / json "} и этот ведущий сервер ответил неверным запросом. Надеюсь, что кому-то еще это пригодится.

Спасибо за то, что вы уделили время для решения проблемы.

0 голосов
/ 26 января 2020

вы должны добавить в foreign key related name и в serializer в class Meta добавить соответствующие поля

...