У меня есть следующая модель Усер:
class User(AbstractBaseUser, PermissionsMixin):
#... other attributes
photo = models.ImageField(upload_to='avatars', blank=True)
Основной serialización, который я реализовал этой модели:
class UserSerializer(serializers.ModelSerializer):
team = serializers.StringRelatedField()
def setup_eager_loading(queryset):
queryset = queryset.select_related('team',)
class Meta:
model = User
fields = ('url', 'username','password','first_name','last_name',
'photo','team','position','last_login',)
Поле team
это чужеземный ключ в модели Усер, который последовательно преобразован, чтобы оптимизировать Ваш результат в консультациях в базу данных, когда есть связи, с методом setup_eager_loading function
.
Функция viewset модели User
он:
from rest_framework import viewsets
from rest_framework import filters
from .models import User
from .serializers import UserSerializer
# Viewsets define the behavior of the view
class UserViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows users to be viewed or edited.
"""
queryset = User.objects.all().order_by('-date_joined')
serializer_class = UserSerializer
filter_fields = ('username','is_player', 'first_name','last_name','team','email',)
Когда я иду в инстанцию пользователя в моем последовательно преобразованном api путь Джанго Рест Фрамеворк, и хочу обновить какую-то (любую) информацию об этой инстанции через данные json чистые (json raw средняя дата type: application/json) я получаю это сообщение:
Как я могу манипулировать на уровне CRUD объектами User
последовательно преобразованные в моем api через данные json чистые в Джанго Рест Фрамеворк без того, чтобы у него были ошибки кодирования?
Это происходит, потому что он надеется, что ты посылаешь ему файл для поля photo, если ты сделаешь одну ediciГіn с API browsable, эта envГ - в POST и это решено "заменяя" всю стоимость модели теми, которых ты посылаешь и как ты посылаешь application/json вместо multipart, бросает ошибку pudo декодировать это поле файла.
, Если бы ты сделал ее peticiГіn с AJAX, cURL, и т.д... podrГ-схвати посылать PATCH и таким образом обновлять частично и служащая без проблемы.
я рекомендую Тебе использовать Postman , чтобы сделать просьбы, так как API Browsable DRF остается коротким.
типов Привета. Я надеюсь помочь тебе.
ИЗДАЛ:
, Как реализация просьбы используя jQuery AJAX:
var username = 'mauricio';
$.ajax({
url: '/api/users/'+username+'/',
method: 'PATCH',
data : {
first_name: 'Mauricio Alberto'
},
success: function(response){
console.log(response);
},
error: function(response){
console.warn(response);
}
});
В этом примере становится отвечающим современным требованиям частично используя PATCH, а именно, одинокий изменяется поле first_name
.