2016-11-15 74 views
1

在我的API的原始数据表明,在作出POST请求这种结构的POST请求。如何让Django的REST框架与数组属性的对象

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

,并在这里的API列表是一些例子结构:

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

现在,让一个POST请求时,我的目标数据是这样的:

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

而我得到的说,这个错误:

contactnumber:[{non_field_errors:[“无效的数据。预期 字典,却得到了海峡。“]},...]

UPDATE

这是我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', 
      ) 
+0

您可以发布您的视图集中和串行代码? – Dap

+0

@Dap我刚刚更新了我的帖子 –

回答

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送类型的字典的数组。 你也可以调整一些领域的关系要做到这一点,但它是一个有点复杂,因为你既需要员工ID和电话号码,以检查单一性。

+0

我使用angularjs使员工序列化的数据模型。并感谢指出阵列与字典的问题。现在我所需要做的就是使contactnumber成为一个字典而不是数组。 –

相关问题