【问题标题】:Django JSON format errorDjango JSON 格式错误
【发布时间】:2018-11-09 08:54:57
【问题描述】:

当我手动将数据输入到 POST 请求中时,我收到此错误。但是当我在管理页面中执行此操作时,没有错误。 “contact_number” 字段出错..

这是添加管理员时的正确格式:

{
"name": "Santos",
"email": "san",
"address": "san",
"note": "san",
"contact_number": [
    "123455",
    "1231231",
    "23123123"
]

}

“contact_number” 字段出错。 这是在 POST 请求中通过邮递员添加时的结果:

{
    "name": "3123",
    "email": "qwe@gmail.com",
    "address": "Col",
    "note": "noting",
    "contact_number": [
        "['3123', '123123']"
    ]
}

views.py

@method_decorator(csrf_exempt)
def phonebook_list(request):

    if request.method == 'GET':
        phonebooklist = PhoneBook.objects.all()
        serialized_data = [pb.to_json() for pb in phonebooklist]
        return JsonResponse(serialized_data, safe=False)
    elif request.method == 'POST':
            data= request.body.decode('utf8')
            data= json.loads(data)
            try:
                new_contact = PhoneBook.objects.create(name=data["name"],address=data["address"],email=data["email"],note=data["note"])
                ContactNumber.objects.create(contact_number=data["contact_number"],number=new_contact)
                serialized_data = [new_contact.to_json()]
                return JsonResponse({"created": serialized_data}, safe=False)
            except:
                return JsonResponse({"error":"not valid data"}, safe=False)

models.py

class PhoneBook(models.Model):
    name = models.CharField(max_length=50)
    address = models.CharField(max_length=100, default='address')
    email = models.CharField(max_length=50, default='email')
    note = models.CharField(max_length=100, default='note')

    def to_json(self):

        contact_numbers = [c.contact_number
                     for c in self.contact_numbers.all()]
        return { 
            'name':            self.name, 
            'email':           self.email, 
            'address':         self.address,
            'note':            self.note,
            'contact_number': contact_numbers
         }

    def __str__(self):  
        return self.name

class ContactNumber(models.Model):  
    number = models.ForeignKey(PhoneBook, related_name="contact_numbers")
    contact_number= models.CharField(max_length=30)

    def __str__(self):  
        return self.contact_number

【问题讨论】:

    标签: json django python-3.x api


    【解决方案1】:

    现在好了,如果contactnumber大于1,我就循环了联系人号码。

      contact_number = data['contact_number']
      for x in contact_number:
        qs = ContactNumber(qs.number_id = new_contact.id, qs.contact_number = x)
        qs.save()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-18
      • 2016-06-09
      • 2016-10-28
      • 2015-01-20
      • 2014-07-06
      • 1970-01-01
      • 2018-02-10
      相关资源
      最近更新 更多