POST pk в FormData() превращает его в строку, где я могу преобразовать его обратно в int?
В React я отправляю formData() в свой бэкэнд Django. Первоначально я просто отправлял int для поля pk, но затем я добавил поле изображения, поэтому мне пришлось преобразовать данные, которые я отправлял, в formData. Теперь я получаю сообщение об ошибке, что мой бэкэнд ожидал int, а не строку. FormData преобразует данные в строки.
Мой сериализатор выглядит так:
class TripReportSerializer(serializers.ModelSerializer):
author = AuthorField(queryset=User.objects.all())
countries = CountryField(queryset=Country.objects.all(), many=True)
favoriters = serializers.PrimaryKeyRelatedField(required=False, queryset=User.objects.all(), many=True)
image = serializers.ImageField(max_length=None, use_url=True, required=False)
class Meta:
model = TripReport
fields = ('__all__')
Поле стран - это поле, которое доставляет мне неприятности. Я сериализовал это так:
class CountryField(serializers.PrimaryKeyRelatedField):
def to_representation(self, value):
pk = super(CountryField, self).to_representation(value)
try:
item = Country.objects.get(pk=pk)
serializer = CountrySerializer(item)
return serializer.data
except Country.DoesNotExist:
return None
def get_choices(self, cutoff=None):
queryset = self.get_queryset()
if queryset is None:
return {}
return OrderedDict([(item.id, str(item)) for item in queryset])
что позволяет мне выполнять POST только с помощью pk (или списка pks) вместо всего объекта путем переопределения метода to_representation. Это возможно int(validated_data['pk']
где-то или мне нужно переопределить мой метод создания?
мой метод post в React выглядит следующим образом:
export const postTripReport = (author, title, content, countries, image) => {
const token = localStorage.getItem('token');
return dispatch => {
dispatch(postTripReportsPending());
const formData = new FormData();
formData.append('title', title);
formData.append('content', content);
formData.append('author', author);
formData.append('countries', countries);
formData.append('image', image);
axios.post(
`${process.env.REACT_APP_API_URL}/api/v1/reports/`,formData,
{headers: { 'Authorization': `Token ${token}`}}
)
.then(response => {
dispatch(postTripReportsFulfilled(response.data));
})
.catch(err => {
dispatch(postTripReportsRejected());
dispatch({type: "ADD_ERROR", error: err});
})
}
}