Есть JSON вида:
[
{
"groupId": 123,
"groupName": "Group 1",
"monthName": "Май",
"monthNumber": 5,
"year": 2021,
"usersDutyList": [
{
"userName": "Test",
"userFullname": "Test User",
"userId": 553,
"userEmail": "asd@asd.com",
"isOnDutyThisMonth": true,
"userPhone": "+1 234 5678",
"userExt": "123",
"isOwner": "false"
},
{
"userName": "Test2",
"userFullname": "Test2 User",
"userId": 458,
"userEmail": "qwe@qwe.com",
"isOnDutyThisMonth": true,
"userPhone": "+1 234 5678",
"userExt": "321",
"isOwner": "false"
},
]
}
]
Я написал такие модели:
class Group(Model):
groupId = SmallIntegerField(primary_key=True, verbose_name='ID группы')
groupName = CharField(max_length=100, verbose_name='Наименование')
monthName = CharField(max_length=8, choices=MONTH_NAME_CHOICES, verbose_name='Название месяца')
monthNumber = SmallIntegerField(choices=MONTH_NUMBER_CHOICES, verbose_name='Номер месяца')
year = SmallIntegerField(choices=YEAR_CHOICES, default=datetime.datetime.now().year)
class User(Model):
userName = CharField(max_length=20, unique=True, verbose_name='Логин')
userFullname = CharField(max_length=40, verbose_name='ФИО')
userId = SmallIntegerField(primary_key=True, verbose_name='ID пользователя')
userEmail = EmailField(unique=True, verbose_name='Email')
userPhone = CharField(max_length=15, verbose_name='Номер телефона')
userExt = CharField(max_length=10, verbose_name='Добавочный')
isOwner = BooleanField(verbose_name='Руководитель группы')
group = ForeignKey(Group, on_delete=CASCADE, related_name='usersDutyList', verbose_name='Группа')
Мне необходимо из этого JSON создать объект модели Group и пользователей, связанных с ней, из ключа usersDutyList.
Написал такие сериализаторы:
class UserSerializer(HyperlinkedModelSerializer):
class Meta:
model = User
fields = '__all__'
class GroupSerializer(HyperlinkedModelSerializer):
usersDutyList = UserSerializer(many=True, required=False)
def create(self, validated_data):
users = validated_data.pop('usersDutyList')
group = Group.objects.create(**validated_data)
for user in users:
user_dict = dict(user)
User.objects.create(group=group.groupId, **user_dict)
return group
Но так как в сериализатор UserSerializer не передается объект группы, то я закономерно получаю ответ
[
{
"usersDutyList": [
{
"group": [
"Обязательное поле."
]
}
]
},
{
"usersDutyList": [
{
"group": [
"Обязательное поле."
]
}
]
}
]
Подскажите, пожалуйста, как реализовать такой функционал?