2

Я создаю новый пользователь в Django, но когда я пытаюсь добавить пользователь с существующей электронной почтой я получаю 400 статуса иRestangular с Джанго рамкой отдыха и статусом 400

{ 
    "email": ["This field must be unique."] 
} 

И получил это в консоли: errors Я использую этот конфиг для углового и Джанго

app.config(['$httpProvider', function ($httpProvider) { 
    $httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; 
}]); 
app.config(function ($httpProvider) { 
    $httpProvider.defaults.xsrfCookieName = 'csrftoken'; 
    $httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken'; 
}); 

Это, как я пытаюсь справиться с этой ошибкой на POST

var users = Restangular.all('users'); 
     users.post({ 
      email: $scope.email, 
      first_name: $scope.firstname, 
      last_name: $scope.lastname, 
      phone: $scope.phone, 
      password: $scope.password 
     }).then(function(response){ 
      console.log(response); 
      alert("done"); 
     },function(response) { 
      console.log("Error with status code", response.status); 
     }); 

Версии:

Django==1.8.4 
djangorestframework==3.2.4 
"angular": "1.4.7", 
"restangular": "1.5.1" 

Любые идеи? UPD Модели сериализатор:

class UserSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = PUser 
    def create(self, validated_data): 
     user = PUser(
      email=validated_data['email'], 
      first_name=validated_data['first_name'], 
      last_name=validated_data['last_name'], 
      phone=validated_data['phone'] 
     ) 
     user.set_password(validated_data['password']) 
     user.save() 
     return user 

PUSER модель копия Django AbstractUser, но без имени пользователя и адреса электронной почты не требуется, и уникальный

+1

Пожалуйста, разместите свой сериализатор. –

+0

Вы хотите обновить существующего пользователя? «POST» предназначен для создания, а не для обновления. Ошибка - это ограничение базы данных в определении модели Django 'User'. У вас не может быть 2 пользователей с тем же адресом электронной почты. –

+0

Обновлено сообщение с моделями. Я создаю новых пользователей, и все работает нормально, но мне нужно обрабатывать ошибки, когда электронная почта в уже используемом – Painhardcore

ответ

1

Обрабатывать ошибку 400, проверяя ответ на 2-е функции, переданной в к функции регистрации обратного вызова then. Этот второй параметр является функцией обратного вызова ошибки обработчика:

users.post({[...]}).then(
    // success server response handler 
    function(response){ 
     console.log(response); 
     alert("done"); 
    }, 
    // failure/error server response handler 
    function(response) { 
     // debugger; // breakpoint for observing error responses 
     if (response.data['email'] === 'This field must be unique.']) { 
      // handle the duplicate email issue 
      // e.g. display a warning, or a popover, or whatever. 
     } else { 
      console.log("Error with status code", response.status); 
     } 
    }); 

Если данные не выглядит так же, как выше, а затем проверить точную ошибку:

  • открыть отладчик (Ctrl +сдвиг + J в хроме)
  • разкомментировать debugger; линии выше
  • Обновить страницу
  • послать новый запрос пользователя POST, который имеет дублирующий адрес электронной почты
  • инспектировать ответ от сервера в отладчике

Щипните ошибочный ответ соответственно.

0

Ответ был близок ... и причина была связана с пакетом lodash, но не стандартным. Я использовал «lodash-custom-restangular»: «0.0.5» через npm и restangular работает достаточно хорошо ... за исключением этого поведения stange. Я загрузил lodash с беседкой и все работает, как ожидалось. Thx для всех.

 Смежные вопросы

  • Нет связанных вопросов^_^