объект dict для формирования данных для операции исправления в VueJS - PullRequest
0 голосов
/ 16 января 2020

Я делаю вызов патча для REST API, он прекрасно работает, когда я вызываю это из curl или Postman

[
    {
        "user": {
            "pk": 2,
            "username": "rayees",
            "email": "rayees.xxxx@xxxx.co.in",
            "first_name": "Rayees",
            "last_name": "xxxxx",
            "contact_number": "1111"
            },
        "event_cost": "cost",
        "schedule": [
            {
                "day_available": "MON",
                "time_available": "Morning"
            }
        ],
        "cities": [
            {
                "uid": 1,
                "city": "SANTA CLARA"
            }
        ]
    }
]

Но он не работает из приложения VueJS в данных FORM, например

methods: {
    updateDetails() {
      var formData = new FormData();

      formData.set("first_name", this.userDetails.first_name);
      formData.set("last_name", this.userDetails.last_name);
      formData.set("contact_number", this.$refs.contact_input.value);
      formData.set("email", this.$refs.email_input.value);
      formData.set("event_cost", this.$refs.event_cost.value);
      var schedule = [
        {
            "day_available": "TUE",
            "time_available": "Morning"
        }
       ]
      console.log(JSON.stringify(schedule))
      formData.set("event_date", JSON.stringify(schedule))

Данные не обновляются из данных формы с помощью вызова REST API с помощью метода Patch, какие-либо предложения?

Здесь проблема со значением

schedule

Похоже, что stringfy неправильно форматирует данные

JSON.stringify(schedule)

Ожидается, что Backend API

  editDetails(data, token_key, username) {
    return apiClient.patch(`/user/${username}/details`, data, {
      headers: {
        Authorization: `Token ${token_key}`,
        "Content-Type": "multipart/form-data"
      }
    });

Вход в мой views.py - при отправке данных формы (VueJS)


2020-01-16 19:28:59,248 apis.views   INFO     ProfileDetails(data=<QueryDict: {'first_name': ['Rayees'], 'last_name': ['xxxx'], 'contact_number': ['1111'], 'email': ['rayees.xxxx@xxx.co.in'], 'event_cost': ['32.00'], 'bio': ['Test BIO333'], 'schedule': ['[{"day_available":"TUE","time_available":"Morning"}]']}>, instance=<Chef: rayees>):

Вход в мой views.py - при отправке json данных (почтальон)

2020-01-16 19:31:49,250 apis.views   INFO     ProfileDetails(data={'user': {'pk': 2, 'username': 'rayees', 'email': 'rayees.xxx@xxx.co.in', 'first_name': 'Rayees', 'last_name': 'xxx', 'contact_number': '322222', 'user_type': 'Chef', 'photo': None, 'address': 'TEsting'}, 'first_name': 'Rayees', 'last_name': 'xxxxx', 'contact_number': '11111', 'email': 'rayees.xxxx@xxx.co.in', 'photo': None, 'bio': 'Test BIO333', 'event_cost': '32.00', 'schedule': [{'day_available': 'TUE', 'time_available': 'Morning'}], 'dish_set': [], 'cities': [{'uid': 1, 'city': 'SANTA CLARA'}]}, instance=<Chef: rayees>):     

Вот метод исправления с параметром из бэкэнда

def patch(self, request, *args, **kwargs):
            user = User.objects.get(user__username=kwargs['username'])
            serializers = ProfileDetails(data=request.data, instance=user)
            self.logger.info(serializers)
            if serializers.is_valid():
                serializers.save()
                self.logger.info("Serializer save response")
                self.logger.info(serializers.data)
                return Response(serializers.data, status=status.HTTP_201_CREATED)
            return Response(serializers.errors, status=status.HTTP_400_BAD_REQUEST)

1 Ответ

0 голосов
/ 18 января 2020

Кажется, вы передаете на сервер строку, содержащую JSON, вместо JSON данных напрямую.

Возможно, вам не нужно создавать FormData диктовку. Разве вы не можете вызвать editDetails напрямую с объектом данных вместо dict?

Кроме того, данные, которые вы передаете с почтальоном, отформатированы не так. Вы можете попробовать следующее:

const data = {
    user: {
        first_name: this.userDetails.first_name,
        last_name: this.userDetails.last_name,
        contact_number: this.$refs.contact_input.value,
        email: this.$refs.email_input.value
    },
    event_cost: this.$refs.event_cost.value,
    schedule: [
        {
            day_available: "TUE",
            time_available: "Morning"
        }
    ]
};

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