thepoy 发表于 2019-9-16 12:21

刚学习RESTful,遇到报错(1048, "Column 'b_name' cannot be null")

本帖最后由 thepoy 于 2019-9-16 14:41 编辑

PyCharm中的REST工具。
models如下:
class Book(models.Model):
    b_name = models.CharField(max_length=32)
    b_price = models.FloatField(default=10)

    def to_dict(self):
      return {'id': self.id, 'b_name': self.b_name, 'b_price': self.b_price}

views如下:
@csrf_exempt
def books(request):
    if request.method == 'GET':
      data = {
            'status': 200
      }
      return JsonResponse(data)
    elif request.method == 'POST':
      b_name = request.POST.get('b_name')
      b_price = request.POST.get('b_price')

      book = Book()
      book.b_name = b_name
      book.b_price = b_price
      book.save()

      data = {
            'status': 201,
            'msg': '添加成功',
            'data': book.to_dict()
      }

      return JsonResponse(data)

用REST测试:

报错:
IntegrityError at /api/books/
(1048, "Column 'b_name' cannot be null")
Request Method:      POST
Request URL:      http://127.0.0.1:8000/api/books/?b_name=%E8%A5%BF%E6%B8%B8%E8%AE%B0&b_price=9.9
Django Version:      2.2.5
Exception Type:      IntegrityError
Exception Value:      
(1048, "Column 'b_name' cannot be null")




能力有限,实在看不出来是哪里的问题,请大佬指教一下


===================================
已解决:


pycharm的问题,换postman行了,垃圾pycharm!毁我青春!

知心 发表于 2019-9-16 12:31

b_name 这个键的值不能为空,检查一下

thepoy 发表于 2019-9-16 12:59

知心 发表于 2019-9-16 12:31
b_name 这个键的值不能为空,检查一下
是不能为空啊,POST本来就是要往b_name里填东西的,我搞不懂的就是为什么没能填进去

TheFeng 发表于 2019-9-16 13:01

Pycharm的问题 ,他会把post的信息打在 url上 。 请使用 postman
或者自己写一个测试API的脚本就可以了

jonasr 发表于 2019-9-16 13:06

脚本里判断下         b_name = request.POST.get('b_name')
                              b_price = request.POST.get('b_price')

如果是空 提示一下.
应该是你用来测试POST的软件 并没有提交B_name的值导致的 要么客户端测试的软件换一个或者你在研究研究
要么服务器里判断下 如果b_name和b_price的值是空 如何处理
一个合格的API 必然要对客户传来的值进行验证

thepoy 发表于 2019-9-16 14:14

TheFeng 发表于 2019-9-16 13:01
Pycharm的问题 ,他会把post的信息打在 url上 。 请使用 postman
或者自己写一个测试API的脚本就可以了

666,确实是此问题,换了postman就解决了
页: [1]
查看完整版本: 刚学习RESTful,遇到报错(1048, "Column 'b_name' cannot be null")