У меня две модели
Модель пользователя Auth и профиль пользователя
UseProfile - это:
class UserProfile(models.Model):
user = models.OneToOneField(User, related_name='profile')
name = models.CharField(_lazy(u'Name'), max_length=255)
Для чего я использую эти сериализаторы:
from rest_framework import serializers
from django.contrib.auth.models import User
from oneanddone.users.models import UserProfile
class UserProfileSerializer(serializers.ModelSerializer):
class Meta:
model = UserProfile
fields = ('name',)
class UserSerializer(serializers.ModelSerializer):
profile = serializers.RelatedField()
class Meta:
model = User
fields = ('id', 'username', 'email', 'groups', 'profile')
Представления для обоих сериализаторов:
class UserListAPI(generics.ListCreateAPIView):
"""
API endpoint used to get a complete list of users
and create a new user.
"""
queryset = User.objects.all()
serializer_class = UserSerializer
class UserDetailAPI(generics.RetrieveUpdateDestroyAPIView):
"""
API endpoint used to get, update and delete user data.
"""
queryset = User.objects.all()
serializer_class = UserSerializer
lookup_field = 'email'
Вложенный сериализатор отлично работает для запросов на создание / удаление, но для таких запросов на обновление, как:
pdata = {"username":"testusername", "email":"[email protected]","profile":[{"name":"Changed Name"}]}
requests.patch('http://localhost:8000/api/v1/user/[email protected]/',data=json.dumps(pdata), headers={'Authorization':'Token bd876bfa04843c6ce1b82c84e27cd510f68dfbbd','Content-Type': 'application/json'}).text
Я получаю сообщение об ошибке, что объект «UserProfile» не повторяется. Отслеживание: http://pastebin.com/RA7JWFua
Можно ли выполнить подобное обновление с помощью только вложенного сериализатора? Также укажите специальный код, который мне нужно будет добавить, чтобы он заработал.