从数据库中删除不在数组中的元素,从数组中添加不在数据库中的元素

2024-03-29 12:07:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在Django中创建一个view,以接收和处理来自POST requestJSON数据。我当前在数据库中添加/更新多个NotificationEmail对象时遇到问题

我想做的是检查通过POST请求发送的数组(email)中的电子邮件是否已经作为该对象的emailAddress元素存储在NoticationEmail对象中。如果它已经作为NotificationEmail对象的emailAddress存在,我想保留它。如果数组中的电子邮件没有作为emailAddress值存储在任何NotificationEmail对象中,我想添加一个新的NotificationEmail对象,将此电子邮件作为emailAddress值。最后,如果有任何特定的id(通过POST请求给出)的emailAddress值没有列在emails array中,我想删除它

我现在刚刚收到一条关于我创建的for循环的错误消息,所以我无法运行服务器并进行尝试。我已经检查过,如果没有for循环,它确实会接收POST请求,并且能够将完整的array电子邮件作为emailAddress值添加到该NotificationEmail对象中。但这不是我想在我的程序中的行为

我的Django view代码如下:

@csrf_exempt
def editMachines(request):
       if request.method == 'POST':
                json_data = json.loads(request.body)
                a = Machine.objects.filter(id = json_data['id']).update(name = json_data['machine_name'])
                userid = a.user_id
                b = NotificationEmail.objects.filter(machine_id = json_data['id'].values()
                for i in range (len(json_data['email'])):
                        exists = false
                        count = 0
                        while exists == false or count < len(b):
                                if json_data['email'][i] == b[count]['emailAddress']:
                                        exists = true
                                        count++
                                else:
                                        b[count].delete()
                                        d = NotificationEmail(machine_id = json_data['id'], email = json_data['email'][i].values(), user = userid)
                                        d.save()
                                        count++



                return HttpResponse(status = 200)

这是JavaScript代码,它发送POST request

 function updateMachine(){
                            var e = $('#emailAdd').val()
                            var emails = e.split(', ')
                            console.log(emails);
                            var data = {id : machineid, machine_name : $('#name').val(), email : emails};
                                    console.log(data)
                                    $.ajax({
                                            type:'POST',
                                            url:'/edit/machines/', 
                                            data: JSON.stringify(data),
                                            dataType: 'json',
                                            contentType: 'application/json',
                                            statusCode : {
                                                    200 : function(){
                                                                      alert("User updated.");
                                                                        window.location = "/users/dashboard/";
                                                    }
                                            },
                                            async : false
                                    });
                             }

我知道Javascript中的Ajax工作得很好,因为我可以对它做一些更改,但是我在尝试让Django view做我需要的事情时遇到了很多麻烦

如果有人能指导我如何去做,我将不胜感激

提前谢谢


Tags: 对象djangonameidjsondata电子邮件email