【问题标题】:model.objects.create in views is not working in my django project?视图中的 model.objects.create 在我的 django 项目中不起作用?
【发布时间】:2017-01-13 19:25:51
【问题描述】:

这是models.py

from django.db import models
class Iot(models.Model):
        user = models.CharField(max_length="50")
        email = models.EmailField()

这是我的views.py

def Test(request):
    if request.method == 'PUT':
        user = request.data['user']
        email = request.data['email']
        try:
            s = Iot.objects.create(user=user)
            print s.user
            s.email = email
            s.save()
            return Response('ok', status=status.HTTP_200_OK)
       except:
            return Response('error',status=status.HTTP_400_BAD_REQUEST)

我正在使用 django rest_framework。当我发送数据时,它不会存储在数据库中并返回:

('错误',status=status.HTTP_400_BAD_REQUEST)

【问题讨论】:

  • 为什么人们一直这样做? 不要隐藏异常。删除那个 try/except 并找出 actual 错误是什么。

标签: python django django-rest-framework


【解决方案1】:

最有可能发生该错误是因为您尝试在没有电子邮件的情况下创建物联网,但它是必填字段。 你应该做类似的事情

Iot.objects.create(user=user, email=email)

要使您的代码以您选择的方式工作(一个一个而不是一次设置属性),您需要摆脱 create 并执行以下操作:

s = Iot(user=user)
s.email = email
s.save()

有两种不同的方法可以根据请求在模型中创建实体。 create 里面调用了 save() 方法,所以它们是完全一样的,但是在这种情况下 create 更方便。

通常你应该避免先创建()然后保存(),因为它会出现两个对 DB 的查询。

UPD:+1 对@Daniel 关于异常的评论

【讨论】:

  • 你能打印一个例外吗?做类似except Exception as exc:
猜你喜欢
  • 2019-01-07
  • 2019-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-05
  • 2015-11-16
  • 1970-01-01
相关资源
最近更新 更多