4👍
You can do all of that in the serializer by using the function create
(it would be the same with update, but you are talking here of creation).
class FamilySerializer(serializers.ModelSerializer):
# No need to define members here as it is the related name
# and that it will popped out
class Meta:
model = Family
fields = ('id', 'name', 'address', 'monthly_contribution', 'members', 'enabled')
read_only_fields = ('id',)
def create(self, validated_data):
members = None
if 'members' in validated_data.keys():
members = validated_data.pop('members')
# Create the family
family = Family.objects.create(**validated_data)
# Deal with members data
if members is not None:
for member_data in members:
role_id = member_data.get('role', None)
if role_id is not None:
role = Role.objects.get(id=role_id)
Parishioner.objects.create(
family=family,
role=role
)
return family
The family is created and returned, and the members are created too with the correspondent role.
On the front, it would like that :
axios.post('api/family/', {
family_name: 'Smith',
members: [
{
role: '3' # Father id for example
},
{
role: '2', # Mother id
}
]
})
You can change of course the role and use the name if you want. Just be careful to be coherent between the field to identify the role in front and back Role.objects.get(field=value)
Source:stackexchange.com