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

5jdjgkvh  于 2023-10-21  发布在  Go
关注(0)|答案(2)|浏览(185)

这是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。当我发送数据时,它不存储在数据库中并返回:
('error',status=status.HTTP_400_BAD_REQUEST)

yduiuuwa

yduiuuwa1#

最有可能的错误发生,因为你试图创建没有电子邮件的Iot,但它是必填字段。你应该做一些像

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

为了让你的代码按照你选择的方式工作(一个接一个地设置属性,而不是一次设置),你需要摆脱create并执行以下操作:

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

有两种不同的方法来根据请求在模型中创建实体。Create在内部调用保存()方法,所以它们是完全相同的,但是在这种情况下create更方便。
通常你也应该避免先创建()然后保存(),因为这会给数据库带来两个查询。
UPD:+1对@丹尼尔关于异常的评论

s5a0g9ez

s5a0g9ez2#

由于某些原因,无法访问对象属性。您可以通过手动将管理器添加到模型定义中来纠正此问题,如下所示:

objects = models.Manager()

此外,就像@丹尼尔说的那样,你可以删除try/catch来查看我发现的问题的真实的原因。

相关问题