Django REST с React: ax ios PATCH с FormData не обновляет никаких данных - PullRequest
0 голосов
/ 02 мая 2020

Я пытаюсь создать форму, которая редактирует данные профиля пользователя и использует метод исправления для изменения всех полей, кроме имени пользователя, потому что имя пользователя является первичным ключом и единственным идентификатором указанного c пользователя.

Обновление:

- Я изменил его на обычный метод PATCH, и данные не обновляются

- Я также убедился, что formData отправляет правильные данные, что он и делает

Из чтения предыдущих вопросов я узнал, что обычный ax ios .patch метод не работает с FormData и я следовал инструкциям добавления:

formData.append ("_ method", "PATCH")

и смены топора ios метод до ax ios .put , однако, я все еще получаю ошибку 400, которая в разделе данных гласит:

username: ["Это поле требуется. "]

Помощь будет высоко ценится. Спасибо, добрые незнакомцы!

Редактировать профиль Отправить:

  onSubmit = (e) => {
    e.preventDefault();
    const { firstName, lastName, profile } = this.state;
    const username = localStorage.getItem("username");
    formData.append("_method", "PATCH");
    formData.append("firstName", firstName);
    formData.append("lastName", lastName);
    formData.append("profile_picture", profile);
    this.props.onUpdate(formData, username);
  };

Топор ios Запрос

export const userUpdate = (formData, username) => {
  axios
    .post(`http://127.0.0.1:8000/user/api/${username}`, {
      formData,
      headers: { "Content-Type": "application/x-www-form-urlencoded" },
    })
    .then((response) => {
      console.log(response);
    })
    .catch((error) => {
      console.log(error.response);
    });
};

Пользователь models.py

class User(models.Model):
    firstName = models.CharField(max_length = 20, blank = True, default='Anonymous')
    lastName = models.CharField(max_length = 25, blank = True, default='')
    username = models.CharField(max_length = 50, unique=True, primary_key=True)
    profile_picture = models.ForeignKey('upload.Profile', on_delete=models.CASCADE, null=True)

Изображение профиля models.py

class Profile(models.Model):
    image = models.ImageField(blank=False, null=False, upload_to=profile_path, default='f_profile.jpg')

1 Ответ

0 голосов
/ 03 мая 2020

Предполагается, что вы используете PATCH, если хотите запрос patch.

export const userUpdate = (formData, username) => {
  axios
    .patch(`http://127.0.0.1:8000/user/api/${username}`, {
      formData,
      headers: { "Content-Type": "application/x-www-form-urlencoded" },
    })
    .then((response) => {
      console.log(response);
    })
    .catch((error) => {
      console.log(error.response);
    });
};

Кроме того, удалите _method из формы. Если у вас нет определенного c представления, чтобы что-то из этого сделать, оно вам не понадобится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...