如何在django rest框架中使用数组属性发出对象的发布请求

时间:2016-11-15 19:57:50

标签: python django serialization django-rest-framework

在我的api中,原始数据在发布请求时建议了这种结构。

{
    "empID": "",
    "fullname": "",
    "contactnumber": []
}

在api列表中有一些示例结构:

{
    "empID": "DJS1003",
    "fullname": "Doe, John Smith",
    "contactnumber": [
        {
            "contactnumber": "123456789"
        },
        {
            "contactnumber": "321456879"
        }
    ]
}

现在,发布帖子请求时我的对象数据如下所示:

contactnumber : Array[2]
    0:"444-1234"
    1:"0911-124-7854"
fullname:"John Doe"
empID:"1001"

我收到的错误是:

  

contactnumber:[{non_field_errors:[“无效数据。预计a   字典,但得到str。“]},...]

更新

这是我的model.py

class Employee(models.Model):
    empID = models.CharField(primary_key=True, max_length= 50, null=False)
    fullname = models.CharField(max_length=50)

class ContactNumber(models.Model):
    empID = models.ForeignKey(Employee, related_name="contacts", to_field='empID', on_delete = models.CASCADE)
    contactnumber = models.CharField(max_length=13)

这是我的serialzer.py

class ContactsSerializer(serializers.ModelSerializer):
      class Meta:
            model = ContactNumber
            fields = (
                  'empID_id',
                  'contactnumber',
            )

class EmployeeListSerializer(serializers.ModelSerializer):
      contacts = ContactsSerializer(many=True)

      class Meta:
            model = Employee
            fields = (
                  'empID',
                  'fullname',
            )

1 个答案:

答案 0 :(得分:2)

嗯,我认为错误很明确。

DRF期望的是:

{
    "empID": "DJS1003",
    "fullname": "Doe, John Smith",
    "contactnumber": [
        {
            "contactnumber": "123456789"
        },
        {
            "contactnumber": "321456879"
        }
   ]
}

您要发送的内容:

{
    "empID": "101",
    "fullname": "John Doe",
    "contactnumber": [
        "444-1234",
        "0911-124-7854"
   ]
}

所以,你需要你的JS发送一个dicts数组。 你也可以调整一些关系字段来实现这一点,但它有点复杂,因为你需要员工ID和电话号码来检查单一性。