DRF: ожидалось целое число, а получена строка (с использованием Axios)
Я получаю следующую ошибку, когда пытаюсь отправить массив идентификаторов в django rest framework:
Моя полезная нагрузка выглядит следующим образом:
назначенные_помещения: 1,2
Когда я использую тестовую страницу drf api, она работает, и полезная нагрузка выглядит следующим образом: assigned_facilities : [1, 2]
Так что я предполагаю, что мне не хватает скобок, и поэтому он не работает? Как мне это исправить?
const cpBoard = useSelector((state) => state.cpBoard);
const facilityIds = (cpBoard.cpBoardItems?.map(cpBoardItem => (cpBoardItem.id)));
function submitFacilities() {
const facilitydata = new FormData()
facilitydata.append("assigned_facilities", facilityIds);
axios.patch(API.leads.update(id), facilitydata, {
headers: {
"Authorization": `Bearer ${accessToken}`,
'Content-Type' : 'application/x-www-form-urlencoded',
'Accept' : 'application/json',
},
withCredentials: true,
})
.then(res => {
setLead(res.data)
})
.finally(() => {
setLoading(false)
})
}
views.py
class LeadUpdateView(UpdateAPIView):
permission_classes = [IsAuthenticated, IsLeadOwner]
serializer_class = LeadUpdateSerializer
def get_queryset(self):
return Lead.objects.all()
serializers.py
class LeadUpdateSerializer(serializers.ModelSerializer):
is_owner = serializers.SerializerMethodField()
class Meta:
model = Lead
fields = (
"id",
"first_name",
"last_name",
"PrimaryAddress",
"assigned_facilities",
)
read_only_fields = ("id", "created_at", "agent", "is_owner")
def get_is_owner(self, obj):
user = self.context["request"].user
return obj.agent == user
Можете ли вы поделиться функцией/видением в Django, которая обрабатывает этот запрос?
Мое предположение заключается в том, что вы отправляете форму, которая неправильно отформатирована. Вы отправляете строку идентификаторов "[1,2]", что, вероятно, не сработает. Можете ли вы попробовать отформатировать вашу форму следующим образом:
{
...
"assigned_facilities": [{"id": 1}, {"id": 2}],
...
}
Я догадался:
axios.patch(API.leads.update(id), { "assigned_facilities": facilityIds}, {
headers: {
"Authorization": `Bearer ${accessToken}`,
'Accept' : 'application/json',
},
withCredentials: true,
})
.then(res => {
setLead(res.data)
})
.finally(() => {
setSending(false)
})
}
Отправляя его вместо этого как FormData просто как объект с ключом assigned_facilities и значением facilityIds