serializer:Django reszta ramy zagnieżdżone serializer częściowa zmiana
class ProfileSerializer(serializers.ModelSerializer):
class Meta:
model = UserProfile
fields = ('foo', 'bar')
class UserSerializer(serializers.ModelSerializer):
userprofile = ProfileSerializer(partial=True)
class Meta:
model = User
fields = ('username', 'password', 'email', 'userprofile')
def create(self, validated_data):
profile_data = validated_data.pop('userprofile')
user = User.objects.create(**validated_data)
UserProfile.objects.create(user=user, **profile_data)
return user
def update(self, instance, validated_data):
profile_data = validated_data.pop('userprofile')
profile = instance.userprofile
instance.username = validated_data.get('username', instance.username)
instance.email = validated_data.get('email', instance.email)
instance.save()
profile.foo = profile_data.get('foo', profile.foo)
profile.bar = profile_data.get('bar', profile.bar)
profile.save()
return instance
Widok:
class UsersViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
authentication_classes = (TokenAuthentication,)
permission_classes = (IsAuthenticated,)
Zarówno tworzenie i aktualizacja pracują dobrze, problem jest z częściowych aktualizacji. Model użytkownika django ma wymaganą nazwę użytkownika i chciałbym, aby było to opcjonalne. Czy jest jakiś sposób, aby włączyć częściowe aktualizacje dla tego scenariusza?
Na przykład chciałbym zaktualizować z PUT tylko "foo".