Angular 7 formData + файл + вложенный объект - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть django Backend и Angular 7, все отлично работает при отправке formData с моими параметрами и файлом, но когда я пытаюсь отправить вложенный json, он пуст.Вложенный json для вложенного сериализатора в моем объекте.

пример с почтальоном

Угловой POST

        let input = new FormData();
        var empty = {
            name: "name"
        }
        input.append('username', user.value.username);
        input.append('password', user.value.password);
        if(profile_photo){
            input.append('profile_photo', profile_photo, profile_photo.name);
        }   
        input.append('first_name', user.value.first_name);
        input.append('last_name', user.value.last_name);
        input.append('email', user.value.email);
        input.append('role', user.value.role);
        input.append('active', user.value.active);
        input.append('address', user.value.address);
        input.append('job', user.value.job);
        input.append('phone', user.value.phone);
        input.append('phone_type', user.value.phone_type);
        input.append('superadmin_profile', new Blob([JSON.stringify(empty)], {type : 'application/json'}));
        input.append('general_profile', new Blob([JSON.stringify(empty)], {type : 'application/json'}));
        input.append('security_profile', new Blob([JSON.stringify(empty)], {type : 'application/json'}));

        if(user.value.properties){
            input.append('properties', user.value.properties);
        }
        if(user.value.residentials){
            input.append('residentials', user.value.residentials);
        }

        const httpOptions = {
            headers: new HttpHeaders({
                'Authorization': 'token ' + localStorage.getItem('userToken')
            })
        };
        return this.http.post(this.Endpoints.getUsers, input, httpOptions);

Я поставил обязательный = False, такэто не дает «Это поле обязательно для заполнения».но он все еще пустой, я также напечатал request.data в представлении django, и вложенные переменные json есть, но не попадают в сериализатор.

Django Serializer

class UserSerializer(serializers.ModelSerializer):
    superadmin_profile = SuperadminProfileSerializer(required=False)
    general_profile = GeneralProfileSerializer(required=False)
    security_profile = SecurityProfileSerializer(required=False)
    residentials_photo = serializers.SerializerMethodField()
    password = serializers.CharField(write_only=True)
    """
    Serializer for Department model.
    """
    class Meta:
        model = User
        fields = [
            'id',
            'password',
            'username',
            'first_name',
            'last_name',
            'email',
            'role',
            'active',
            'address',
            'job',
            'phone_type',
            'phone',
            'superadmin_profile',
            'general_profile',
            'security_profile',
            'residentials',
            'residentials_photo',
            'properties',
            'sections',
            'profile_photo'
        ]

    def create(self, validated_data):
        user = self.context['request'].user
        print validated_data
        superadmin_profile = validated_data.pop('superadmin_profile')
        general_profile = validated_data.pop('general_profile')
        security_profile = validated_data.pop('security_profile')
...