Я следую по ссылке ниже, чтобы отправить вложенный объект на django https://django.cowhite.com/blog/create-and-update-django-rest-framework-nested-serializers/
Мои классы даны:
class Chef(models.Model):
address = models.CharField(max_length=200,default='SOME STRING')
name = models.CharField(max_length=100,default='SOME STRING')
email = models.CharField(max_length=100,default='SOME STRING')
phoneNo = models.IntegerField(default=0)
password = models.CharField(max_length=100,default='SOME STRING')
class Package(models.Model):
price = models.IntegerField(default=0)
chef = models.ForeignKey(Chef, on_delete=models.CASCADE,related_name='package_set', null=True, blank=True)
package_no=models.IntegerField(default=0)
Сериализаторы:
class Package_Serializer(serializers.ModelSerializer):
class Meta:
depth = 1
model = Package
fields = '__all__'
class chef_package_Serializer(serializers.ModelSerializer):
package_set = Package_Serializer(many=True)
class Meta:
model = Chef
fields = ('address', 'name', 'email', 'phoneNo', 'password', 'package_set')
def create(self, validated_data):
package_data = validated_data.pop('package_set')
musician = Chef.objects.create(**validated_data)
for album_data in package_data:
Package.objects.create(chef=musician, **album_data)
return musician
Я использую «Почтальон» для отправки данных.
{
"address": "gg",
"name": "dff",
"email": "ggg",
"phoneNo": 234,
"password": "234",
"package_set": [
{
"price": 1500,
"package_no": 1,
"chef": {
"address": "gg",
"name": "dff",
"email": "ggg",
"phoneNo": 234,
"password": "234"
}
}
]
}
Данные сохранены, но при использовании приложения флаттера возникает следующая ошибка
E / флаттер (21201 ): [ОШИБКА: flutter / lib / ui / ui_dart_state. cc (157)] Необработанное исключение: тип List (Package) не является подтипом типа 'String' в типе cast
json Сериализуемые классы флаттера:
@JsonSerializable()
class Chef{
Chef(
this.address,
this.name,
this.email,
this.phoneNo,
this.password,
this.package_set
);
final String address ;
final String name ;
final String email ;
final String phoneNo ;
final String password ;
final List<Package> package_set ;
factory Chef.fromJson(Map<String, dynamic> json) => _$ChefFromJson(json);
Map<String, dynamic> toJson() => _$ChefToJson(this);
}
@JsonSerializable(explicitToJson: true)
class Package {
var price;
var package_no;
Chef chef;
Package(
this.price,
this.package_no,
this.chef,
);
factory Package.fromJson(Map<String, dynamic> json) => _$PackageFromJson(json);
Map<String, dynamic> toJson() => _$PackageToJson(this);
}