Не удается отправить данные массива в конечную точку REST - PullRequest
0 голосов
/ 25 июня 2019

Я использую Django REST framework.У меня есть модель, которая выглядит следующим образом:

class Post(models.Model):
    title       = models.CharField(max_length=100, null=False)
    content     = HTMLField()
    created_at  = models.DateField(auto_now_add=True)
    authors     = models.ManyToManyField(User)

С представлением API и сериализатором, который выглядит следующим образом:

class CreateStoryApiView(CreateAPIView):
    serializer_class = PostSerializer

class PostSerializer(serializers.ModelSerializer):

    class Meta:
        model = Post
        fields = ('title', 'content', 'authors')

Переходя к фактической конечной точке, я действительно могу успешно отправить.Я пытаюсь использовать Ajax для получения подробной информации и передачи данных в конечную точку, но по какой-то причине я всегда получаю ошибку 400 неверных запросов.Если я удалю поле авторов, у меня не будет этой ошибки.Вот как выглядит запрос Ajax:

$.ajax({
    type: 'POST',
    url: '/api/save-post/',
    data: {
    "csrfmiddlewaretoken": getCookie('csrftoken'),
    "title": "dasf",
    "desct": "dasf",
    "content": "fdasf",
    "authors": [1,2]
    },
    success: function (msg) {
        console.log(msg);
    }
});

Когда я пытаюсь выполнить этот запрос Ajax, я получаю 400 неверных запросов.Почему я не могу отправить свой массив успешно?Я пробовал "authors[]": [1,2] и "authors": "[1,2]" и много других комбинаций, но кажется, что по какой-то причине ничего не работает.Что я делаю не так?

1 Ответ

0 голосов
/ 26 июня 2019

проверьте ваш файл django settings.py.Вам нужно правильно настроить следующие параметры, чтобы отправить запрос с другого сервера.

 CORS_ORIGIN_WHITELIST = (
    'localhost',
    'your-domain.com',
    '127.0.0.1',
    '127.0.0.1:8080'
)

CSRF_TRUSTED_ORIGINS = (
    'your-domain.com',
)

CORS_ORIGIN_ALLOW_ALL = True

CORS_EXPOSE_HEADERS = [
'Access-Control-Allow-Origin',
'Access-Control-Allow-Headers'
]

CORS_ALLOW_CREDENTIALS = True

CORS_ALLOW_HEADERS = (
    'accept',
    'accept-encoding',
    'authorization',
    'content-type',
    'cache-control',
    'dnt',
    'origin',
    'user-agent',
    'x-csrftoken',
    'x-requested-with',
)

CORS_ALLOW_METHODS = (
    'DELETE',
    'GET',
    'OPTIONS',
    'PATCH',
    'POST',
    'PUT',
)

Я подозреваю, что из-за этого

...