Python 视图中的model.objects.create在我的django项目中不起作用?

Python 视图中的model.objects.create在我的django项目中不起作用?,python,django,django-rest-framework,Python,Django,Django Rest Framework,这是models.py from django.db import models class Iot(models.Model): user = models.CharField(max_length="50") email = models.EmailField() def Test(request): if request.method == 'PUT': user = request.data['user'] ema

这是
models.py

from django.db import models
class Iot(models.Model):
        user = models.CharField(max_length="50")
        email = models.EmailField()
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)
这是我的
views.py

from django.db import models
class Iot(models.Model):
        user = models.CharField(max_length="50")
        email = models.EmailField()
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_框架。当我发送数据时,它不会存储在数据库中并返回:

('error',status=status.HTTP\u 400\u BAD\u请求)


最有可能发生此错误的原因是您尝试在不使用电子邮件的情况下创建物联网,但这是必填字段。 你应该这样做

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

s = Iot(user=user)
s.email = email
s.save()
有两种不同的方法可以根据请求在模型中创建实体。Create调用内部的save()方法,因此它们完全相同,但在本例中,Create更方便

通常情况下,您应该避免执行create()和save(),因为它会向DB显示两个查询


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

为什么人们一直这样做?不要隐藏异常。删除该try/except并找出实际错误是什么。然后您可以打印一个异常吗?执行类似于
的操作,例外情况除外,例如exc: